DES(python)

DES

what?

对称的加密算法

why?

如何保证安全性?

通过各种置换操作,对明文进行加密。

加解密效率高

加密秘钥==解密密钥

相对RSA来说如何不安全?

因为加密密钥和解密密钥相同,加密的安全性就依赖于密钥的安全性,而在网络交互过程中,环境复杂,密钥的保密安全性难以保证。

how?

加密


des对64位的明文进行分组操作,通过一个初始置换,将明文分成左半部分&右半部分。然后进行16轮完全相同的运算(f),在运算过程中数据与密钥结合,经过16轮后,左右半部分结合在一起,最后经过一个末置换(初始置换的逆置换),完成加密过程。

DES的运行模式

模式 描述 用途
ECB 每个明文独立地以同一密钥加密 传送端数据(如一个加密密钥)
CBC 加密算法的输入时当前明文组与前一密文组的异或 传送数据分组,认证
CFB 每次只处理输入的 比特,将上一次的密文用作加密算法的输入以产生伪随机输出,改输出再与当前明文异或以产生当前密文 传送数据流,认证
OFB 与CFB类似,不同再与本次加密算法的输入为前一次加密算法的输出 有扰信道上传送数据流

代码:

来源http://whitemans.ca/des.html

# encoding: utf-8
import pyDes

# For Python3, you'll need to use bytes, i.e.:
#   data = b"Please encrypt my data"
#   k = pyDes.des(b"DESCRYPT", pyDes.CBC, b"\0\0\0\0\0\0\0\0", pad=None, padmode=pyDes.PAD_PKCS5)

data = "加密Please encrypt my data"
data = bytes(data,encoding='utf-8') #将utf8转化为byte,注意加密的数据必须为byte
k = pyDes.des("DESCRYPT", pyDes.CBC, "\0\0\0\0\0\0\0\0", pad=None, padmode=pyDes.PAD_PKCS5)
d = k.encrypt(data)
print("Encrypted: %r" % d)
print("Decrypted: %r" % k.decrypt(d))
assert k.decrypt(d) == data
上一篇:DES加密算法,c语言实现


下一篇:2019Android 网络编程总结篇,你想要的三次握手和四次握手