Python实现DES加密解密的方法介绍(代码)


当前第2页 返回上一页

代替函数由8个S盒来组成,每个S盒都有6位的输入和4位的输出。对每个S盒,输入的第一位和最后一位组成一个2位的二进制数,用来选择S盒4行替代值中的一行,中间4位用来选择16列中的某一列。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

#明文R扩展为48位

def R_expand(R):

    new_R = []

    for i in E:

        new_R.append(R[i-1])

    return new_R

 

#将两列表元素异或

def xor(input1,input2):

    xor_result = []

    for i in range(0,len(input1)):

        xor_result.append(int(input1[i])^int(input2[i]))

    return xor_result

 

#将异或的结果进行S盒代替

def S_Substitution(xor_result):

    s_result = []

    for i in range(0,8):

        tmp = xor_result[i*6:i*6+5]

        row = tmp[0]*2+tmp[-1]

        col = tmp[1]*8+tmp[2]*4+tmp[3]*2+tmp[4]

        s_result.append('{:04b}'.format(S[i][row][col]))

    s_result = ''.join(s_result)

    return s_result

#F函数

def F(R,K):

    new_R = R_expand(R)

    R_Kxor= xor(new_R,K)

    s_result = S_Substitution(R_Kxor)

    p_result = P_Transposition(s_result)

    return p_result

 

#将S盒代替的结果进行P置换

def P_Transposition(s_result):

    p_result = []

    for i in P:

        p_result.append(int(s_result[i-1]))

    return p_result

4、加密过程

DES加密需要经过16轮迭代,前15轮迭代每次结束需要交换L和R,第16次不交换

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

def DES_encrypt(filename,key,outputFile):

    #从文件中读取明文

    plaintext = inputText(filename)

    #将明文进行置换分离

    L,R = IP_Transposition(plaintext)

    #生成Kset

    K = generateKset(key)

    for i in range(0,15):

        oldR = R

        #F函数

        p_result = F(R,K[i])

        R = xor(L,p_result)

        L = oldR

    p_result = F(R,K[15])

    L = xor(L,p_result)

    #IP逆置换

    reversedP = IP_reverseTransp(L+R)

    #生成16进制表示的密文

    Cipher = generateHex(reversedP)

    #将密文写入outputFile文件

    writeFile(outputFile,Cipher)

    return Cipher

DES解密:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

def DES_decrypt(filename,key,outputFile):

    #文件中读取密文

    Ciphertext = inputText(filename)

    #将密文进行置换分离

    L,R = IP_Transposition(Ciphertext)

    #生成Kset

    K = generateKset(key)

    for i in range(15,0,-1):

        oldR = R

        #F函数

        p_result = F(R,K[i])

        R = xor(L,p_result)

        L = oldR

     

    p_result = F(R,K[0])

    L = xor(L,p_result)

    reversedP = IP_reverseTransp(L+R)

    plaintext = generateHex(reversedP)

    writeFile(outputFile,plaintext)

    return plaintext

源码地址 https://github.com/SuQinghang...

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的python视频教程栏目!

以上就是Python实现DES加密解密的方法介绍(代码)的详细内容,更多文章请关注木庄网络博客!!

返回前面的内容

相关阅读 >>

Python中的排序操作和heapq模块的介绍(代码示例)

如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍

Python基于递归算法实现的汉诺塔与fibonacci数列

Python编程怎么学

Python实现二维数组输出为图片_Python

Python枚举类定义及作用(实例解析)

Python中reduce()函数的示例

Python是一种跨平台、开源、免费的高级动态编程语言,对么

Python竖线运算符怎么打

Python中关于日期加减法的操作详解

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...