我正在编写一个加密库,它允许您生成对称或非对称密钥/密钥对,并在以下4个类中的任意一个中使用它:TextEncA
、TextEncS
、ImageEncA
和ImageEncS
。代码看起来语法正确,但在测试代码时,我使用unittest测试TextEncS
类时遇到错误-即Assert错误。
下面是测试TextEncS
类的代码:
class TestTextEncS(unittest.TestCase):
def setUp(self):
self.message = b"This is a test message"
self.key = tienc.generate_key_s()
self.text_enc = tienc.TextEncS(self.key)
def test_encrypt_decrypt(self):
ciphertext, tag = self.text_enc.encrypt(self.message)
result = self.text_enc.decrypt(ciphertext, tag)
self.assertEqual(self.message, result)
def test_decrypt_failure(self):
wrong_key = os.urandom(32)
ciphertext, tag = self.text_enc.encrypt(self.message)
self.assertRaises(Exception, self.text_enc.decrypt, ciphertext, tag, wrong_key)
下面是TextEncS
类本身的代码:
class TextEncS:
""" symmetric text encryption """
def __init__(self, key):
self.key = key
def encrypt(self, plaintext):
cipher = AES.new(self.key, AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(plaintext)
return ciphertext, tag
def decrypt(self, ciphertext, tag):
cipher = AES.new(self.key, AES.MODE_EAX, tag)
return cipher.decrypt(ciphertext)
对称密钥的密钥按如下方式生成:
def generate_key_s():
key = os.urandom(32)
return key
在终端中看到的错误如下所示:
======================================================================
FAIL: test_encrypt_decrypt (Test_TIENC.TestTextEncS)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\*****\Desktop\tienc\tests\Test_TIENC.py", line 38, in test_encrypt_decrypt
self.assertEqual(self.message, result)
AssertionError: b'This is a test message' != b'\x1c\x83\x8cJ\xa7\x1b\x02g\xfet\xf1XOP\x9c\xa6\xa8\x99k\xabC\x01'
----------------------------------------------------------------------
我将如何着手解决这个问题,我应该尝试什么?
我试过改变代码,关于已经阅读了文档,但没有什么我已经尝试似乎已经工作。
1条答案
按热度按时间vuktfyat1#
修改类
TextEncS
您必须修改您的生产代码如下:
修改如下:
encrypt()
返回3个值(我添加了chiper.once
)decrypt()
有3个参数(我添加了once
);此外,decrypt()
的主体与您的代码有些不同在您的问题中,您没有包括
import
。在我的代码中,导入为:修改测试代码
相应修改测试代码(参见代码内的注解):
有用的链接
有关使用AES加密数据的详细信息,请参阅this documentations。
要知道为什么我使用
Cryptodome
而不是Crypto
模块,请参见this link。