DES,python

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