加密算法学习总结---柱状换位加密

常见密码学(积累与特征)坚持更新 记录ctf crypto中常见的密码类型:古典密码,现代密码学等 坚持坚持坚持,积累与特征 ... 阅读详情
AI摘要

本文介绍了一种经典的换位密码技术——柱状换位加密。通过重新排列明文中的字母形成密文,利用特定的KEY对信息进行加密和解密。文章详细展示了加密和解密的具体步骤,并提供了一个Python实现的例子。

柱状换位加密

换位密码使用某种加密算法重新排列明文消息中的字母,从而形成密文消息。解密算法只需要反演加密转换的过程就能得到原始消息。

一.柱状换位加密它的加密算法:

1.给定加密的KEY,并按ASCII字母顺序给KEY的每一个字符标号:

选择ATTACKER作为加密的KEY,按照字母顺序给KEY每个字符进行编号得到如下结果:
这里写图片描述

2.将明文以KEY的长度为单位进行拆分,按行排列:

假设当明文为:The fighters will strike the enemy bases at noon 那么重新拆分和排列后的结果如下(本例忽略了空格):
这里写图片描述

3.按照KEY的字母标号为先后顺序,按列读取明文,进行重新组装得到密文:

这里写图片描述

二.柱状换位加密它的解密算法:

1.解密的算法和加密的算法正好相反,将密文按照KEY标号的顺序进行还原。

这里写图片描述
将得到的明文按行读取并组合即可。

三柱状换位密码的实现:

"""
柱状换位加密 Python Demo
"""


class PosReplace:
    def __init__(self, key):
        self.__key = key
        self.__key_index = self.__get_key_index()


    def encrypt(self, clear_text):

        fragement_len = len(self.__key)
        fragement_cnt = int(len(clear_text) / fragement_len)
        left_tail_char_cnt = int(len(clear_text) % len(self.__key))
        pading_char_cnt = len(self.__key) - left_tail_char_cnt

        # 明文字符串按秘钥长度进行分片存储
        clear_text_fragements = [list(clear_text[i:i + fragement_len]) for i in
                                 range(0, len(clear_text), fragement_len)]

        # 最后不足一分片的字符填充后存储
        clear_text_fragements[fragement_cnt] += list(' ' * pading_char_cnt)

        # 按key每个字符index的顺序,按列取明文字符,转换为密文的行,形成加密效果。
        cipher_text = self.__fragements_col_to_txt_line(clear_text_fragements, self.__key_index)

        return cipher_text

    def decrypt(self, cipher_text):

        cipher_text_fragements = []
        fragement_cnt = len(self.__key)
        fragement_len = int(len(cipher_text) / fragement_cnt)
        left_tail_char_cnt = int(len(cipher_text) % len(self.__key))

        # 不足一个分片长度的也要占一个分片
        fragement_len = fragement_len + 1 if left_tail_char_cnt != 0 else fragement_len

        # 以秘钥的长度分片并存储密文
        cipher_text_fragements = [list(cipher_text[i:i + fragement_len]) for i in
                                  range(0, len(cipher_text), fragement_len)]

        # 根据key每一位的index 排序每一个分片的内容
        cipher_text_fragements = sorted(cipher_text_fragements,
                                        key=lambda x: self.__key_index[cipher_text_fragements.index(x)])

        # 以排序后的分片的列作为行读取密文,并组成字符串即为明文
        clear_text = self.__fragements_col_to_txt_line(cipher_text_fragements, range(fragement_len))

        return clear_text

    def __get_key_index(self):
        # 根据Ascii码,计算key中每一个位的index
        key_index_lst = list(map(lambda key_char: sorted(self.__key).index(key_char), self.__key))

        # 处理重复的index,重复的加1
        key_index_adjust = []
        for index in key_index_lst:
            key_index_adjust.append(index + 1 if index in key_index_adjust else index)

        return key_index_adjust

    def __get_fragements_col(self, text_fragements, index):
        text_line = ''
        for fragment in text_fragements:
            text_line += fragment[index]

        return text_line

    def __fragements_col_to_txt_line(self, text_fragements, trans_seq):
        text_line = ''
        for seq in trans_seq:
            text = self.__get_fragements_col(text_fragements, seq)
            text_line += text

        return text_line


if __name__ == '__main__':

    clear_txt1 = \
    '''
    北京时间2月21日,2018赛季亚冠联赛小组赛G组第二轮赛事上演,广州恒大客场0-0战平大阪樱花,恒大遭遇2连平,大阪樱花小组赛前两战取得1胜1平战绩。比赛中恒大在场面上形成一定优势,阿兰曾连获得分良机,但均未能把握。
    '''

    cipher_txt = PosReplace(key='liuwei').encrypt(clear_txt1)

    print(cipher_txt)

    print(PosReplace(key='liuwei').decrypt(cipher_txt))

执行结果:

#机密后的密文
 22亚赛赛州-樱遇阪前胜比场定曾机把  时日赛小二,场大大,组得绩大成阿分未  月0冠G事恒0花2樱两1赛面优连,握 北21联组上大战,连花战平中上势获但。 
京18赛第演客平恒平小取战恒形,得均
 间,季组轮广0阪遭大赛1。在一兰良能 

#还原后的明文
  北京时间2月21日,2018赛季亚冠联赛小组赛G组第二轮赛事上演,广州恒大客场0-0战平大阪樱花,恒大遭遇2连平,大阪樱花小组赛前两战取得1胜1平战绩。比赛中恒大在场面上形成一定优势,阿兰曾连获得分良机,但均未能把握。
11、密码学中的换位加密与测试程序详解 本文详细解析了密码学中的换位加密与解密程序原理,重点讲解了解密过程中阴影框的判断逻辑及代码实现。通过自动化测试程序验证加密解密的正确性,并深入探讨了随机数生成、列表引用机制及其在函数调用中的行为。文章还介绍了如何使用copy.deepcopy()复制列表、SystemRandom的安全随机数应用,并提出了测试程序的优化思路,如增加测试次数、扩大消息长度和并行测试。最后总结了密码学中随机性的重要性及实际应用扩展方向。 阅读详情

相关推荐

密码转换器可用于生成密码(16位32位)

将你的一段话打进去或者将你记忆深刻的东西或者你原来的密码打进去,生成16位或者32位的MD5密文,拿这个作为你现在用的密码,安全性一下子提高 这样你再也不用担心用生日或者名字或者各种常用的东西做密码会不安全,只要别人不知道你经过加密的,他们永远穷举不出你的密码,而且这个加密很容易得到,只要你自己记得加密了多少次或者怎么加密,你的密码永远不会忘记

换位密码 java_矩形柱状换位加密方法

我试图将我的字符串放入列而不使用数组加密但不知道如何继续而不使用数组请帮助:我需要让他们这样:3 1 2S E LL A LL S TO C KS N OW样本输出:生成密钥:213输入您要编码的秘密消息:立即售出所有股票加密消息:EASCNSLLOSWLLTKO我目前的代码:int num1 = (int) (1+ Math.random() * 3);int num2 = (int) (1+ ...

weixin_33268205的博客 2274

05、基于ALV表报实现复选框、全选、取消全选等功能

基于Function ALV实现复选框、全选及取消全选等功能

wo520yl1314的博客 2370

【密码学】古代、古典密码

古代密码 数据的保密基于加密算法的保密。 Scytale密码 使用一条纸袋作为载体,环绕在一根固定半径的圆柱上。 加密 在绕好的纸带上写上明文。 解开缠绕后,就是加密好的、无序的密文。 圆柱的半径就是密钥。 解密 找到相同大小的圆柱,将纸带缠绕在援助上,即得到密文。 棋盘密码 将26个字母放进一个5x5的表格中(ij放在一起)。 加密 将明文对照表格找到横纵坐标,横坐标+纵坐标即为单个字符的密文。 其中这个表格就是密钥。 解密 对照表格,将密文以2个数字一组,找到对应的字母。

CH3UHX9 2927

Web渗透(一)CRLF注入简介

CRLF注入简介1、基础知识2、原理分析3、漏洞挖掘4、防御手段5、CRLF Payload: 1、基础知识 HTTP报文结构 从上图可以看到:HTTP报文由三部分组成:状态行、首部、主体。 可以看到状态行和首部中的每行都是以回车符(\r,%0d,CR)和换行符(\n,%0a,LF)结束。 十六进制编码分别为0x0d和0x0a,URL编码为%0D和%0A 这是因为HTTP规范中行应该使用CRLF结束。另外,首部和主体由两个CRLF分隔。 2、原理分析 CRLF是 “ 回车+换行 ”(\r\n)的简称。

weixin_39157582的博客 6814

主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效

通用串行总线控制器总是有叹号解决办法 办公室的崩腾时代老电脑,疫情期间没人用,来了开机之后发现鼠标键盘都用不了,本以为是主机放时间长出了问题,后来想起来就百度了“鼠标键盘都失效”的标题,结果发现了“串行总线控制器总是感叹号”的关联问题。正好办公室电脑都装有teamviwer常用来远程办公(在家偷懒)。所以通过远程发现电脑室可以运行的。并在控制面板发现:通用串行总线控制器总是感叹号,插入外设时USB无反应。如图:​ 并且右键选中其中一个,点击最后一个选项:“属性” 可以发现“设备状态”中会提示“由...

xiao_bai_0_0的博客 2万+

密码转换器工具类

架包:commons-rocky_dbcp1.4.jar 代码:

yangshijin1988的专栏 2359

TLSR8258蓝牙Mesh实战:从SDK下载到自定义通信指令全流程(附避坑指南)

本文详细介绍了TLSR8258蓝牙Mesh开发的完整流程,从SDK下载、环境搭建到自定义通信指令的实现。通过实战案例和避坑指南,帮助开发者快速掌握低功耗蓝牙Mesh网络构建技巧,适用于智能家居、工业监控等物联网场景。

weixin_29176179的博客 198

CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲

前言 密码学为数据的处理、存储和通信过程提供附加的安全级别。近年来,数学家和计算机科学家开发了一系列日益复杂的算法,这些算法被设计用于确保机密性、完整性、身份认证和不可否认性。在密码学家花费大量时间开发强加密算法的同时, 黑客们和政府同样投入了可观的资源来破解这些密码学算法。这产生了密码学领域的"军备竞赛",并且导致如今使用的极其精密的算法的不断发展。 本文将紧密围绕CISSP认证考试的CBK3”安全工程”考纲要求,汇合了《CISSP官方认证学习指南》第六、七章和《CISSP认证考试指南》第三章有...

qq_33163046的博客 9725

Proteus仿真实战:基于IIC驱动SSD1306的0.96英寸OLED显示方案解析

本文详细解析了在Proteus仿真环境中基于IIC驱动SSD1306的0.96英寸OLED显示方案。从硬件搭建、IIC接口连接、软件驱动移植到常见问题排查,提供了全面的实战指导,帮助开发者快速实现OLED显示功能并优化性能。

weixin_28724661的博客 769

一篇文章将三极管讲透:三极管从原理到应用,从参数到特性,从入门到精通

晶体三极管(Transistor)是一种半导体电子器件,也是电子工程中最基本的元件之一。它有三个区域,分别是P型半导体,N型半导体和P型半导体,从而形成PNP型晶体三极管或者NPN型晶体三极管。

学习帮的博客 9万+

python换位加密算法_柱状换位密码

我试图找出如何在Python中加密一个列换位密码,只要给定一个纯文本大写字符串和任意长度的数字键。例如,如果键是3124,字符串是'IHAVETWOCATS',它将按如下方式组织字符串:3124IHAVETWOCATS然后首先返回列1中的字符,然后返回列2等,直到最后返回加密字符串'HTAAWTIECVOS'。到目前为止,我知道我需要使用一个累加器,我一直在玩弄使用字典的想法,但我完全被卡住了。以...

weixin_39926103的博客 3219

Qt5.15.2安卓开发环境配置保姆级教程(含JDK8、SDK33、NDK21.4及Gradle国内镜像避坑指南)

本文提供Qt5.15.2安卓开发环境配置的完整教程,涵盖JDK8、SDK33、NDK21.4及Gradle国内镜像设置,帮助开发者快速搭建开发环境并避免常见问题。通过详细步骤和实战技巧,解决依赖冲突、网络超时等难题,提升开发效率。

weixin_28730353的博客 202

python密码学转换明文_换位密码(Transposition Cipher)

换位密码(Transposition Cipher)Transposition Cipher是一种加密算法,其中明文中的字母顺序被重新排列以形成密文。 在此过程中,不包括实际的纯文本字母表。例子 (Example)转置密码的一个简单示例是columnar transposition cipher ,其中纯文本中的每个字符都是水平写入的,具有指定的字母宽度。 密码垂直写入,创建完全不同的密文。考...

weixin_39689297的博客 1621

大数据合规工程师必备的7项核心技能

当我们谈论“大数据”时,往往先想到它的价值——驱动业务增长、优化用户体验、赋能智能决策。大数据的价值越大,其合规风险的“重量”就越重。2023年,全球有超过120个国家出台了数据保护法规,中国《个人信息保护法》《数据安全法》的实施进入深水区,欧盟GDPR的罚款金额屡创新高(最高达全球营收的4%)。企业面临的合规压力,早已从“被动应对监管”升级为“主动构建合规能力”。在这样的背景下,大数据合规工程师。

SuperAGI2025 1258

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

分享一只加密算法

这是什么加密?可以吃吗? 今天的给大家分享的应该是BASE64、MD5、AES算法共同实现的吧,不过加密后体积会变大些,他不可以吃 一、概述 加密的流程大概就是酱紫的: 原文→BASE64编码 ...

weixin_30448685的博客 121

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[图解密码学]第2章 密码学简史与时间线

一条从公元前5世纪延伸到21世纪的时间轴。时间轴上方是“加密技术”:斯巴达天书、凯撒密码、单表替换、维吉尼亚密码、恩尼格玛、DES、Diffie-Hellman、RSA、AES、SHA-3、SM2/SM3/SM4、后量子密码。时间轴下方是“密码分析技术”:频率分析、卡西斯基测试、图灵炸弹机、差分分析、Shor算法。​。

曼岛_的博客 209

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

密码学编程基础——换位加密

换位加密原理: 换位加密就是将消息打乱,例如原文“Common sense is not so common.”然后我们假如我们将密钥设置成8,然后从将原文的每个字母从1开始编号,空格也算,将1、1+8、1+2*8 ... ... 1+n*8 组成一个字符串,将2、2+8、2+2*8... ... 2+n*8组成一个数组以此类推。 看了这张图有没有似曾相识相识的感觉。希尔排...

The future is already here it's just not evenly distributed。 2807

读书笔记一【加密——换位法】

加密是用来保护数据的方式,要注意,加密必须要能够解密,所以以前认为md5是一种加密算法是不对的。 1.简单的换位法 换位法是比较简单的加密算法,就是以固定顺序更换句子中的词语顺序。 例如句子“我是一名程序员”,采用每3个字母获取一个字的方法,那么把句子的每个字标记一个编号 那么第一轮取到“我”、“名”、“员”三个字 然后继续向后取,已经取过的字则跳过 以此类推,最终得到密文:“...

weixin_30855761的博客 1132

python老是报参数未定义_Python:将“尚未定义”的类名称作为默认参数

我有一个“class1”,它必须能够创建一个对象不同的班级名称.类名作为名为“friend”的参数传递.我希望“friend”-argument默认为名为“class2”的类名.另外,我需要对类“class2”具有相同的行为.所以“class2”应该将“class1”作为默认的friend-argument:class class1():def __init__(self, friend = cl...

weixin_39598568的博客 425

加密算法知识(密钥交换方法和RSA基本原理)

done lin 加密算法知识目录加密算法知识1、密钥交换算法2、散列算法:3、数字证书:4、简单的总结: 加密算法知识 1、密钥交换算法 使用对称加密算法时,密钥交换是个大难题,所以Diffie和Hellman提出了著名的Diffie-Hellman密钥交换算法。 Diffie-Hellman密钥交换算法原理: (1)Alice与Bob确定两个大素数n和g,这两个数不用保密 (2)Alice...

Done Lin的专栏 7765

移位密码(凯撒密码)

移位密码简介,分析和实现。

破晓而生,踏浪前行。 5656

2020-12-23

通信领域的编码 1.摩斯编码 特征特点:用点(.)和划(-)来编码范围0-9、A-Z的字符,字母不区分大小写,两个字母之间的空格用斜杠(/)或者三个点(.)或者一个划(-)表示,两个单词之间的间隔是七个点(.)。 根据摩斯编码的原理,CTF中也有出现过变种的摩斯编码,比如点(.)和划(-)用数字0和1来表示等此类变种的思路。 在线解密&工具: http://www.jb51.net/tools/mor...

v_3483608762的博客 2161

几种常见密码形式

1、栅栏易位法 即把将要传递的信息中的字母交替排成上下两行,再将下面一行字母排在上面一行的后边, 从而形成一段密码。 举例: TEOGSDYUTAENNHLNETAMSHVAED 解: 将字母分截开排成两行,如下 TEOG SDYUTAENN HLNE T AMSHVAED 再将第二行字母分别放入第一行中,得到以下结果 THELONGESTDAYMUSTHAVE ANEND. 课后小题:请破解以下密码 Teie

m0_62207482的博客 1万+

第六讲 古典密码算法(置换密码 & 单表代替密码算法 & 多表代替密码算法)

1 置换(Permutation)密码 对明文字符或字符组进行位置移动的密码 明文的字母顺序被打乱了,但明文字母本身不变 attack at dawnATCADWTAKTAN天书( Scytale ) 500 B.C.,斯巴达人在军事上用于加解密 发送者把一条羊皮纸螺旋形地缠在一个圆柱形木棒上,核心思想是置换。 木棒的直径需要保密2 单表代替密码算法 代替密码 代替(Substitution)密码构造一个或多个密文字母表,然后用密文 字母表中的字母或者字母组来代替明文字母或字母组,各字母或

coderge's 优快云 Blog. 1万+

现代密码学-传统密码技术(置换、代换密码)

置换密码/huanweim 置换密码(Permutation Cipher)又叫换位密码(Transposi-tionCipher),它根据一定的规则重新排列明文,以便打破明文的结构特性。置换密码的特点是保持明文的所有字符不变,只是利用置换打乱了明文字符的位置和次序。 最常见的置换密码有二种: 列置换密码(明文遵照密钥的规程按列换位并且按列读出序列得到密文);周期置换密码(将明文P按固定长度m分组,然后对每组按1,2…,m的某个置换重排位置从而得到密文C)。 ...

关注网络安全、云原生安全 4万+
上一篇: 加密算法学习总结---凯撒密码
下一篇: 加密算法学习总结---DES-CBC加密算法
牛屁哄哄叫兽
博客等级 码龄18年 56粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值