python周期置换密码过程是怎样,代码是什么
Admin 2022-08-25 群英技术资讯 313 次浏览
参考教材:《现代密码学教程》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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
对搜索引擎来说,爬虫不可或缺;对舆情公司来说,爬虫是基础;对 NLP来说,爬虫可以获取语料;对初创公司来说,爬虫可以获取初始内容。但是爬虫技术纷繁复杂,不同类型的抓取场景会运用到不同的技术。
csv文件与txt文件类似,区别点就是在csv文件中,字段间使用“,”或“|”隔开,达到类似与表格的效果,下面这篇文章主要给大家介绍了关于如何利用python创建、读取和修改CSV数据文件的相关资料,需要的朋友可以参考下
Python编程中经常遇到一些莫名其妙的错误, 其实这不是语言本身的问题, 而是我们忽略了语言本身的一些特性导致的,今天就来看下使用Pyth
迭代器也是用来遍历对象成员的,下面这篇文章主要给大家介绍了关于python遍历迭代器自动链式处理数据的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
在实际的算法与程序开发中,经常需要面对的场景就是对同一目录内的文件进行批量操作。并且很多时候目录中的文件明明是有规律的,同时希望程序在进行处理时也是按照一定的顺序进行。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008