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


本文摘自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》频道 >>




打赏

取消

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

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

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

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

评论

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