我通过RSA密钥实例的publickey方法加密文件时收到以下异常

时间:2016-06-29 08:16:54

标签: python cryptography public-key-encryption

This is my code for encrypting a file:

我收到以下错误" cipher_aes = AES.new(session_key,AES.MODE_EAX) AttributeError:'模块'对象没有属性' MODE_EAX'" 如果我删除" AES.MODE_EAX"从NO 10行开始,我在第12行收到以下错误(密文,标签= cipher_aes.encrypt_and_digest(数据) AttributeError:AESCipher实例没有属性' encrypt_and_digest')

from Crypto.PublicKey import RSA
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES, PKCS1_OAEP
with open('encrypted_data.bin', 'wb') as out_file:
 recipient_key = open('public.pem').read()
 recipient_key=RSA.importKey(recipient_key)
 session_key = get_random_bytes(16)
 cipher_rsa = PKCS1_OAEP.new(recipient_key)
 out_file.write(cipher_rsa.encrypt(session_key))
 cipher_aes = AES.new(session_key, AES.MODE_EAX)
 data = b'blah blah blah Python blah blah'
 ciphertext, tag = cipher_aes.encrypt_and_digest(data)
 out_file.write(cipher_aes.nonce)
 out_file.write(tag)
 out_file.write(ciphertext)

1 个答案:

答案 0 :(得分:1)

我在the documentation的任何地方都没有看到密码模式EAX。这表明在目前的稳定版本(2.6.1)中PyCrypto不支持它。

然而,浏览the source code我看到MODE_EAX存在。因此,您可以尝试使用支持MODE_EAX的{​​{3}},2.7.1。

但根据您对encrypt_and_digest的使用情况,我猜你会使用不是基于pycrypto而是使用PyCryptodome的代码。我个人不熟悉图书馆,但它具有您尝试使用的功能。你可以the latest experimental build