gpt4 book ai didi

python - Python 中的 AES 加密 - 使用 pycryptodome 和加密技术时的不同结果

转载 作者:行者123 更新时间:2023-12-01 07:27:41 27 4
gpt4 key购买 nike

出于安全考虑,我们正在从 pycryptodome 转向加密。当使用 pycryptodome 编码相同的纯文本字符串时,我得到了与加密不同的密文,请考虑以下代码:

Pycryptodome:

    def aes_encrypt(self, plain_text):
try:
plain_text_with_padding = self._aes_pad(plain_text).encode("utf-8")
cipher = AES.new(self.aes_secret_key, AES.MODE_CBC, self.aes_iv)

msg = cipher.encrypt(plain_text_with_padding)

return msg.encode("hex")
except Exception as e:
raise AesError(e.message)

密码学:


def aes_encrypt(self, plain_text):
try:
plain_text_with_padding = self._aes_pad(plain_text)
encryptor = Cipher(
algorithm=algorithms.AES(self.aes_secret_key),
mode=modes.CBC(self.aes_iv),
backend=default_backend(),

).encryptor()

msg = encryptor.update(plain_text_with_padding) + encryptor.finalize()

return msg.encode("hex")
except Exception as e:
raise AesError(e.message)

@staticmethod
def _aes_pad(s):
padding_length = AES.block_size - (len(s) % AES.block_size)
return s + padding_length * chr(padding_length)

测试代码:

    def setUp(self):
secret_manager = Mock()
secret_manager.get_secret.return_value = {
"hmac_secret_key": "secret",
"aes_secret_key": "fbc1f4bf4c826fc41d27905bc3eb8cbb",
"aes_iv": "J3wmcjV0Vzd9Jw=="
}
self.crypto_utils = CryptoUtils(secret_manager)

def test_aes_encrypt(self):
asset_id = "123456"

encrypted_asset_id = self.crypto_utils.aes_encrypt(asset_id)

self.assertEqual(
"926fbb0584c6e357157709e723b0e0d2",
encrypted_asset_id
)

使用pycryptodome通过相同的测试代码,但在使用cryptography时生成更长的密文。

感谢您对此事的任何帮助。

最佳答案

问题似乎是 AES block 大小 - 在之前的实现 (Pycryptodome) 中,它以 字节 为单位,而在新的库 (cryptography) 中则以 bytes 给出code>)它以给出。

当使用加密运行具有以下更改的相同代码时,它会产生预期的结果:

    @staticmethod
def _aes_pad(s):
block_size_bytes = AES.block_size / 8
padding_length = block_size_bytes - (len(s) % block_size_bytes)
return s + padding_length * chr(padding_length)

关于python - Python 中的 AES 加密 - 使用 pycryptodome 和加密技术时的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57375945/

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