Pycrypto AESCTR实现

2024-10-03 19:30:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉python和pycrypto。 我正在尝试实现AES-CTR。为了检查我的程序是否正确加密,我尝试使用NIST SP 800-38A标准(第F.5节)中的测试序列。但我没有得到正确的结果。我做错什么了?在

from Crypto.Cipher import AES
from Crypto.Utils import Counter

CTRkey="2b7e151628aed2a6abf7158809cf4f3c"
ctr=Counter.new(128, initial_value=int("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",16))
cipherCTR=AES.new(CTRkey, AES.MODE_CTR, counter=ctr)
print(cipherCTR.encrypt("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff".decode("hex")).encode("hex"))

结果:

^{pr2}$

但预期结果(密文)是:

874d6191b620e3261bef6864990db6ce

Tags: fromimport程序newcountercryptoaesnist
2条回答

我试过了。在

import Crypto.Cipher.AES
import Crypto.Util.Counter

import binascii

key = b'\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c'
iv = b'\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
text = b'\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a'

ctr = Crypto.Util.Counter.new(128, initial_value=int(binascii.hexlify(iv), 16))
cipher = Crypto.Cipher.AES.new(key, Crypto.Cipher.AES.MODE_CTR, counter=ctr)
print(cipher.encrypt(text).encode("hex"))

有结果了

^{pr2}$

使用二进制数据为我工作,和结构编码不建议使用(“hex”)

在NIST SP 800-38A标准(第F.5.1节)中,CTR-AES128加密操作的输入称为明文而不是输入块。在

如果您使用明文6bc1bee22e409f96e93d7e117393172a),您将得到正确的结果,密文874d6191b620e3261bef6864990db6ce。在

相关问题 更多 >