python周期置换密码过程是怎样,代码是什么
Admin 2022-08-25 群英技术资讯 530 次浏览
参考教材:《现代密码学教程》P47 3.1.2
周期置换密码是将明文p串按固定长度m分组.然后对每组中的子串按1,2…,m的某个置换重新排列位置从而得到密文,其中密钥σ包含分组长度信息。
解密时同样对密文c按长度m分组,并按σ的逆置换σ-1把每组子串重新排列位置从而得到明文p。
以例3.3为例
和上次提及的列置换密码类似
import re class timeCode: __key=[] # 密钥 __apaMsg="" # 明文 __secMsg="" #密文 __lenKey=0 #密钥长度 周期值 def getKey(self,s): # 密钥形成函数 Key={} antiKey={} s=re.split(r'[()]',s) #以()分界 while '' in s: # 消除'' s.remove('') temp=[] for i in range(len(s)): for j in range(len(s[i])-1): Key[int(s[i][j])]=int(s[i][j+1]) #密钥字典 antiKey[int(s[i][j+1])]=int(s[i][j]) #反密钥字典 temp.append(int(s[i][j])) #钥匙收录 Key[int(s[i][-1])]=int(s[i][0]) #解决最后一个的问题 antiKey[int(s[i][0])]=int(s[i][-1]) temp.append(int(s[i][-1])) maxtemp=max(temp) #密钥长度 self.__lenKey=maxtemp lenKey={i+1 for i in range(maxtemp)} sameKey=lenKey-set(temp) #找到没有变化的密钥 for i in sameKey: Key[i]=i antiKey[i]=i self.__key.append(Key) self.__key.append(antiKey) def enCode(self,p): #加密函数 self.__apaMsg=p Key=self.__key[0] time=self.__lenKey p=p.replace(' ','') #去除空格 if len(p)%time != 0: p+=' '*(time-len(p)%time) #末尾补齐 n=len(p)//time M=[p[i*time:(i+1)*time] for i in range(n)] #分组生成 M=[M[i][Key[j+1]-1] for i in range(n) for j in range(time)] #矩阵转换 M=''.join(M) #列表转换为字符串 self.__secMsg=M return M def deCode(self,q): self.__apaMsg=p m=self.__lenKey n=len(q)//m Key=self.__key[1] M=[q[i*m:(i+1)*m] for i in range(n)] M=[M[i][Key[j+1]-1] for i in range(n) for j in range(m)] M=''.join(M) self.__secMsg=M return M def Print(self): print(self.__key,self.__apaMsg,self.__secMsg,self.__lenKey) s='(15623)' p='State Key Laboratory of Networking and Switching' a=timeCode() a.getKey(s) q=a.enCode(p) a.deCode(q) a.Print()
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
内容介绍前言一、Xpath简介二、Xpath语法规则语法规则标签定位属性定位索引定位取文本内容三、语法规则练习总结前言网上已经有很多大佬发过Xpath,而且讲的都很好,我是因为刚开始学习网络爬虫,对这
这篇文章主要介绍了Python实战之画哆啦A梦(超详细步骤),文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能,这篇文章主要介绍了python开发的自动化运维工具ansible详解,需要的朋友可以参考下
IP合法性校验是开发中非常常用的,看起来很简单的判断,作用确很大,写起来比较容易出错,今天我们来总结一下,看一下3种常用的IP地址合法
这篇文章主要介绍了Python绘制词云图之可视化神器pyecharts,文章围绕主题展开详细的相关内容,具有一定的参考价值,需要的小伙伴可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008