の抽象化をいくつか作成しましたが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)