python换位密码,python 替换密码
本文主要介绍python密码术中排列密码学习的详细例子。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。
00-1010列替换密码过程加密过程解密过程描述完整代码
目录
参考教材:《现代密码学教程》 P46 3.1.1
列置换密码
过程
将明文p以设定的固定包宽m写成行,即每行有m个字符;如果明文长度不是m的整数倍,不足部分按双方约定的方式填充。如果双方都同意用空格代替空格中的字符,可取的做法是根据1,2…,m的一个置换,设置最终的字符矩阵[Mp]nm,得到字符矩阵[Mp]nm,按[Mp]nm列的顺序依次读取矩阵,得到密文序列c。
加密过程
将密文c写在块宽为n的列中得到字符矩阵[MP] n m,根据加密过程中使用的逆置换-1交换列的位置顺序得到字符矩阵[Mp]nm,依次按1,2…,n行的顺序读取矩阵[Mp]nm得到明文p
解密过程
以例3.2为例
=(143)(56)表示每个括号中的部分依次对应。
1431
565
我在这里使用字典。
对于范围内的I(透镜):
对于范围内的j(len(s[I])-1):
key[int(s[I][j])]=int(s[I][j 1])# key字典
反密钥[int (s [I] [j 1])]=int (s [I] [j]) #反密钥字典
key[int(s[I][-1])]=int(s[I][0])#解决最后一个问题
anti key[int(s[I][0])]=int(s[I][-1])
temp.append(int(s[i][-1]))
当然,=(143)(56)这里没有2,因为2对应的是自己,也就是
22
所以要分开表达。
SameKey=lenKey-set(temp) #找到了未更改的密钥。
因为我在sameKey:
键[i]=i
反键
加密时,先把明文变成矩阵,根据密钥换算载荷。
例如,本主题将矩阵的第一列转换为第四列,第四列转换为第三列,第三列转换为第一列,依此类推。
这可以通过生产来实现。
m=[m[I][key[j 1]-1]for I in range(n for j in range(m)]#矩阵变换
说明
列“”替换了密码。
雅里考
时间:2020-04-17
进口re
分类代码:
__m=0
__n=0
__key=[] # key
__apaMsg= #明文
__secMsg= #密文
Def __init__(self,m): #初始化,定义矩阵的宽度
自我。__m=m
__n=0
__key=[]
__apaMsg=
__secMsg=
Getkey (self,s) : #密钥形成函数
m=自我。__m
Key={}
antiKey={}
S=re.split(r[()],s) #由()分隔
而“在s: #中消除”
s.remove( )
temp=[]
LenKey={i 1 for i in range(m)} #密钥长度
对于范围内的I(透镜):
对于范围内的j(len(s[I])-1):
key[int(s[I][j])]=int(s[I][j 1])# key字典
反密钥[int (s [I] [j 1])]=int (s [I] [j]) #反密钥字典
包含temp . append(int(s[I][j])# key
key[int(s[I][-1])]=int(s[I][0])#解决最后一个问题
anti key[int(s[I][0])]=int(s[I][-1])
temp.append(int(s[i][-1]))
SameKey=lenKey-set(temp) #找到了未更改的密钥。
因为我在sameKey:
键[i]=i
反键
自我。__key.append(Key)
自我。__key.append(antiKey)
DEFECODE (self,p) : #加密函数
自我。__apaMsg=p
m=自我。__m
n=自我。__n
关键=自我。_ _键[0]
P=p.replace( , )#删除空格
P= *(m-len(p)%m) #结束时完成
N=len(p)//m #矩阵列数
自我。__n=n
m=[p[I * m :(i1)* 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) # list被转换成一个字符串。
自我。__secMsg=M
返回M
定义解码(自身,q):
自我。__apaMsg=p
m=自我。__m
n=自我。__n
关键=自我。_ _键[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=" .加入(M)
自我__secMsg=M
返回英语字母表中第十三个字母
自定义打印(自助):
打印(自我. m,自我.__n,自我. key,self .__apaMsg,self .__secMsg)
if __name__==__main__:
m=6
北京2008年奥运会
s=(143)(56)
a=列代码(m)
答。获取密钥
q=a.enCode(p)
e=a。解码(问)
形容词(形容词的缩写)打印()
定义主():
及格
以上就是大蟒密码学列置换密码学习的详细内容,更多关于大蟒密码学列置换密码的资料请关注盛行信息技术软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。