在python中的AES.MODE_CTR密码中不能使用256位计数器

时间:2017-05-15 20:34:44

标签: python encryption cryptography aes pycrypto

人。我使用crypto库进行AES加密和解密。 AES-128非常完美:

ctr = Counter.new(128)
key = os.urandom(16)
obj = AES.new(key, AES.MODE_CTR, counter=ctr)

但是当我将128改为256时,会发生16到32的错误:
ValueError: unsupported format character 'b' (0x62) at index 29
你有什么建议吗?

1 个答案:

答案 0 :(得分:4)

计数器大小与分组密码的块大小相同。密码的块大小和密钥大小没有直接关系。

现在,AES-256的密钥大小为256位,块大小为128位。 Rijndael,其中AES是子集,可以具有256位的块大小。但是,使用密钥大小为128,192或256位的AES仍将具有精确的128位块大小。而这只是因为它已经被定义了。

所以基本上你应该始终将ctr留给Counter.new(128)。如果您想使用AES-256,请使用keyos.urandom(32)增加到32个字节。

如果您想了解如何使用/格式化计数器,请查看NIST SP 800-38A, Appendix B