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" ", 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, " ", 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