gpt4 book ai didi

python - 如何编写加密单元测试?

转载 作者:行者123 更新时间:2023-11-28 21:27:10 24 4
gpt4 key购买 nike

我已经为 Crypto.Cipher.AES.encrypt/decrypt 写了一些抽象,我想为它写单元测试。为 decrypt 编写单元测试很容易,但是是否有任何合理的方法来测试加密本身是否发生?例如,是否有某种方法可以查看字节串并知道是的,那是一大块 AES 加密数据?如果不是(可能泄露了太多信息),我有什么选择来测试我的 encrypt 函数是否有合理的输出?

def encrypt(plaintext):
"""Return 'plaintext' AES encrypted."""
initialization_vector = Random.new().read(AES.block_size)
cipher = AES.new(settings.secret, AES.MODE_CFB, initialization_vector)
return initialization_vector + cipher.encrypt(bytes(plaintext.encode('utf-8')))

def decrypt(crypt):
"""Return 'crypt' AES decrypted."""
initialization_vector, crypt = crypt[:AES.block_size], crypt[AES.block_size:]
cipher = AES.new(settings.secret, AES.MODE_CFB, initialization_vector)
return cipher.decrypt(crypt)

# … this is a method of a unittest.TestCase subclass:
def test_decrypt(self):
"""Test that a message can be decrypted."""
crypt = utils.encrypt("abcdefg")
decrypt = utils.decrypt(crypt)
self.assertEqual("abcdefg", decrypt)

def test_encrypt(self):
"""Test that a message can be encrypted. … if you can"""
crypt = utils.encrypt("abcdefg")
self.assertSomethingmumblemumble(crypt)

最佳答案

伪随机排列(和分组密码)的整个想法就是它看起来是随机的。您可以运行测试来检查随机性,但我很确定这对于 JUnit 测试来说有点太多了。所以我会接受 sr2222 的建议,并简单地通过解密进行测试。

您可以通过使用原始 block 解密并测试其中的内容来测试模式和填充。您还可以测试加密后是否相同( block 加密本身与纯文本和密文具有 1:1 的关系)或者加密是否不同。您可能还可以测试加密数据的大小是否正确。

但是,如果不解密就无法测试加密本身,这首先就是它背后的想法:您无法获得有关明文或 key 的信息 - 任何看起来不随机的东西都会违背这些概念。

[编辑] 测试加密的最好方法可能是针对 official test vectors 进行测试,如果这些还不够或不可用,请根据已知的良好实现(例如经过验证的 openssl)或引用实现(输出)对其进行测试。

关于python - 如何编写加密单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11531741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com