Pycrypto OpenPGP加密:为什么密钥有16字节的限制,我提供的密钥的哪一部分可以达到16字节?

时间:2013-10-09 20:28:56

标签: python encryption pycrypto openpgp

我正在尝试通过pycrypto应用程序在python中使用OpenPGP加密文件。我一直在关注他们代码中提供的示例:https://github.com/dlitz/pycrypto/blob/master/lib/Crypto/Cipher/CAST.py

所以我正在使用mode.openPGP,但我似乎无法使用公钥加密任何东西。我的公钥远远超过他们指定的16字节限制(我见过的任何一代都超过了这个限制)。我应该在这里使用不同的值,比如指纹ID吗?

我正在尝试读取文件的内容,使用密钥对其进行加密,然后将其打印到要发送的新文件中(稍后将删除)。 我的代码如下:

iv = CryptoRandom.new().read(CAST.block_size)
cipher = CAST.new(public_key, CAST.MODE_OPENPGP, iv)
file = open(filename)
contents = ''.join(file.readlines())
encrypted_contents = cipher.encrypt(contents)
encrypted_filename = filename.replace('/tmp/', '/tmp/encrypted')
encrypted_filename = encrypted_filename.replace('.csv', '.asc')
encrypted_file = open(encrypted_filename, 'w')
encrypted_file.write(encrypted_contents)
return encrypted_filename

1 个答案:

答案 0 :(得分:0)

我想你可能误解了你在这里使用的算法。 CAST是对称密钥算法,但是虽然此实现具有“OpenPGP模式”,但这并不意味着您只需将公钥传递给它。

您应该生成一个唯一的16字节密钥并将其传递给CAST.new()。然后,您通常会使用公钥加密 随机生成的密钥,并将密文和加密的随机密钥存储/传输到一起。解密过程将使用私钥解密随机密钥,然后使用解密的随机密钥解密密文。