如何在Python中生成强的AES一次性会话密钥
我正在使用M2Crypto的AES来加密消息,但我对如何生成一个强随机的会话密钥以及它的长度感到困惑。M2Crypto有没有提供生成随机密钥的功能呢?
3 个回答
0
如果你是为了把信息加密后发送给别人,那么你可以使用像Diffie Hellman或者ECDH这样的密钥交换方法来建立一个共同的秘密。如果你只是想加密数据以便存储,那么你需要一个安全的随机数生成器。我觉得M2Crypto这个库好像没有提供这个功能。
不过,看起来M2Crypto是支持Diffie Hellman的。
4
M2Crypto这个库因为文档不够好而出名。
这是我从他们的测试案例中收集到的一些信息:
import os
from M2Crypto import EVP
k = EVP.Cipher(alg='aes_128_cbc', key=os.urandom(16), iv=os.urandom(16), op=enc)
20
AES-128的密钥长度是128位,也就是16个字节。
random_key = os.urandom(16)
这个长度对于大多数用途来说已经足够了。当你把这个随机值输入到M2(或者其他加密库)时,它会在内部被转换成一个“密钥调度”,这个调度实际上是用来进行加密的。