本文摘自php中文网,作者不言,侵删。
本篇文章给大家带来的内容是关于Python实现DES加密解密的方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。DES(Data Encryption Standard)采用64位的分组长度和56位的密钥长度。它将64位的输入经过一系列变换得到64为的输出。解密使用相同的步骤和相同的密钥,唯一不同的是密钥顺序与加密过程相反。
DES加密:
该算法的输入有需要加密的明文和加密使用的密钥,二者长度都为64位。其中密钥的第8,16,24,32,40,48,56,64位为奇偶校验位。
1、明文的处理
将明文读入程序并将其化为二进制串
1 2 3 4 5 6 7 8 9 | def inputText(filename):
with open(filename, 'r' ) as f:
text = f.read()
text = text.split( '\n' )
text = [ eval (x) for x in text]
text = [ '{:08b}' .format(x) for x in text]
text = '' .join(text)
return text
|
对明文进行IP置换,并划分为左右两个子串
1 2 3 4 5 6 7 | def IP_Transposition(plaintext):
LR = []
for i in IP:
LR.append(int(plaintext[i-1]))
L = LR[:32]
R = LR[32:]
return L,R
|
2、对密钥的处理
将密钥读入程序并以二进制串的形式存储
对密钥进行PC-1置换,并划分为两个子串
1 2 3 4 5 6 7 8 | #密钥置换
def Key_Transposition(key):
CD = []
for i in PC_1:
CD.append(int(key[i-1]))
C = CD[:28]
D = CD[28:]
return C,D
|
在生成迭代所需要的密钥之前需要对密钥进行置换压缩
1 2 3 4 5 6 7 | #密钥压缩
def Key_Compress(C,D):
key = C+D
new_key = []
for i in PC_2:
new_key.append(key[i-1])
return new_key
|
生成DES每轮迭代所需要的子密钥,以便加密解密时直接使用
1 2 3 4 5 6 7 8 9 | def generateKset(key):
key = inputKey(key)
C,D = Key_Transposition(key)
K = []
for i in LeftRotate:
C = Key_LeftRotate(C,i)
C = Key_LeftRotate(D,i)
K.append(Key_Compress(C,D))
return K
|
3、F函数
在每轮变换中,整个过程可以用以下公式表示:
$$
L_i = R_{i-1}
$$
$$
R_i = L_{i-1}\bigoplus F(R_{i-1},K_i)
$$
其中轮密钥 Ki长48位,R长32位,首先将R置换扩展为48位,这48位与Ki异或,得到的结果用替代函数作用产生32位的输出。这32位的输出经P置换后与L异或得到新的R
阅读剩余部分
相关阅读 >>
Python怎么导入模块
什么是Python re.match函数?(实例解析)
Python的语言类型的介绍
超简单的Python爬虫之网易云音乐的下载
Python2.7和3.7的区别
Python哪年火的
Python中关于正则表达式非贪婪以及多行匹配功能详解
在Python中操作文件之seek()方法的使用
Python循环语句怎么写
Python是怎么操作文件和目录的?
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » Python实现DES加密解密的方法介绍(代码)