根据维基百科,3DES的密码使用56位加密密钥加密数据;但是Pycryptodome的3DES类使用128位或192位加密密钥。而且Pycryptodome的AES和3DES的加密速度相同,输出类似。是我做错了什么,还是这有点不同
下面是我用Python中的3DES算法加密数据的代码:
from Crypto.Cipher import DES3
from Crypto import Random
key = 'Sixteen byte key'
iv = Random.new().read(DES3.block_size)
cipher_encrypt = DES3.new(key, DES3.MODE_OFB, iv)
plaintext = "Some data to encrypt with 3DES"
encrypted_text = cipher_encrypt.encrypt(plaintext.encode("utf-8"))
cipher_decrypt = DES3.new(key, DES3.MODE_OFB, iv)
cipher_decrypt.decrypt(encrypted_text)
单个DES的有效密钥大小为56位,而不是64位。8位用于parity bits。64位密钥大小是标准的,即使在测试密钥的每个字节的奇偶校验之前,它们也大多被丢弃
DES对于bruteforce是不安全的,因此建议使用2DES和3DES作为解决方案
3DES定义为
c = E(k3,D(k2,E(k1,m)))
,其中E表示加密D表示解密3DES有3个选项
尽管选项1和2可以被视为安全的,但它们不是。DES的64位块大小使其易受sweet32 attack攻击,就像其他64位块大小密码一样。将AES与GCM一起使用,或将ChaCha20与Poly1305一起使用
注意pycryptodome document也以类似的方式提到了这一点,因为这是标准
选项3(单DES)不受支持,库要求包含奇偶校验位的键为16或24字节。它们被忽略,而不是检查。您可以简单地拥有16或24字节长的随机键
相关问题 更多 >
编程相关推荐