为什么PyCryptoDome的3DES算法使用128位或192位密钥而不是56位?

2024-04-26 17:31:36 发布

您现在位置:Python中文网/ 问答频道 /正文

根据维基百科,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)

Tags: 数据keyfromimportnewmode密钥random
1条回答
网友
1楼 · 发布于 2024-04-26 17:31:36

单个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. T3DEA,它使用3个独立密钥k1、k2和k3,密钥大小为56*3=168位
  2. 2TDEA使用2个独立密钥,其中k1=k3具有56*2=112位密钥大小
  3. 这次所有的密钥都是相同的,k1=k2=k3,我们得到一个DES,这已经是不安全的了

尽管选项1和2可以被视为安全的,但它们不是。DES的64位块大小使其易受sweet32 attack攻击,就像其他64位块大小密码一样。将AES与GCM一起使用,或将ChaCha20与Poly1305一起使用


注意pycryptodome document也以类似的方式提到了这一点,因为这是标准

key (bytes/bytearray/memoryview) – The secret key to use in the symmetric cipher. It must be 16 or 24 byte long. The parity bits will be ignored.

选项3(单DES)不受支持,库要求包含奇偶校验位的键为16或24字节。它们被忽略,而不是检查。您可以简单地拥有16或24字节长的随机键

相关问题 更多 >