当前位置: 首页 > 知识库问答 >
问题:

使用pycrypto的AES解密

朱阳曜
2023-03-14

作为一个自学练习,我正在尝试学习如何使用一些pycrypto库。我需要使用AES在CBC_模式下解密密文字符串。I密文、密钥和IV都已给出。以下是我编写的代码:

from Crypto.Cipher import AES

mode = AES.MODE_CBC
key = "a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1"
ciphertext = "a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1";

iv = ciphertext[:32] 
ciphertext = ciphertext[32:] 
decryptor = AES.new(key, mode, iv)
plaintext = decryptor.decrypt(ciphertext)
print plaintext

当我运行这个,我得到以下错误:

ValueError:IV的长度必须为16字节

我知道IV字符串是32个十六进制字符,因此是16个字节。我认为这可能是一个打字问题,但我不知道如何纠正它。有人能帮忙吗?

非常感谢。

共有3个答案

齐嘉庆
2023-03-14

告诉电脑你正在处理巫术。它将其视为字符串。iv=iv.decode('十六进制');

符允晨
2023-03-14

我怀疑你是对的,这取决于打字。请尝试以下方法之一:

iv=比纳斯西。不精确(密文[:32])

iv=长(密文[:32],16)

仲孙景胜
2023-03-14

您的字符串只包含十六进制字符,但它们仍然是普通字符串,因此每个字符都会计数。

因此,您的IV字符串是32字节长的,只要您从密文中剪切出来即可。

 类似资料:
  • 让AES密码文本解密有点困难。 在这个特定的场景中,我使用Crypto-JS在客户端加密数据,并使用PyCrypto在python服务器上解密数据。 加密。js: 解密。py: 我成功地重新计算了HMAC,但当我尝试然后解密密码时,我得到了一些似乎用密码加密的东西�'结果如何。 我在密码文本的输入长度方面遇到了错误,但当我切换到CFB模式时,修复了它,所以我认为这不是一个填充问题。

  • 问题内容: 我正在尝试使用PyCrypto构建两个接受两个参数的函数:消息和密钥,然后对消息进行加密/解密。 我在网络上找到了几个链接可以帮助我,但是每个链接都有缺陷: 在codekoala上的此代码使用了os.urandom,PyCrypto不建议这样做。 此外,我不能保证给函数的键具有预期的确切长度。我该怎么做才能做到这一点? 另外,有几种模式,推荐哪种?我不知道该怎么用:/ 最后,IV到底是

  • 我试图使用PyCrypto构建两个函数,它们接受两个参数:消息和密钥,然后加密/解密消息。 我在网上找到了几个帮助我的链接,但每一个都有缺陷: 编辑:删除了代码部分,因为它不安全。

  • 问题内容: 我正在编写一段代码,以使用对称加密来加密文本。但这并没有带来正确的结果… 在这里,解密后的文本与原始文本不同。 我对密码学不是很了解,所以请多多包涵。我知道CTR模式每次都需要一个“计数器”功能来提供一个随机计数器,但是为什么当我的密钥是32字节并且它也坚持我的消息也是16字节的倍数时,为什么它需要是16字节?这正常吗? 我猜想它不会回到原始消息,因为计数器在加密和解密之间发生了变化。

  • 问题内容: 我今天刚找到pycrypto,并且一直在研究AES加密课程。不幸的是,它只能成功一半。self.h.md5以十六进制格式输出md5哈希,并且为32byte。这是输出。似乎是对消息进行了解密,但是它在解密后放置了随机字符,在这种情况下,是\ n \ n \ n …我认为self.data的块大小有问题,有人知道如何解决此问题吗? Jans-MacBook-Pro:test2 jan $

  • 这里是一个JavaScript部分,它用AES加密解码字符串 我试图用python编写一个类似的解码函数,并导入AES。 谁能帮我做这个吗。我无法找出js到python的所有等效代码。 我查了这个页面Python AES解密例程(代码帮助)和 AES-加密与加密(node-js)/解密与Pycrypto(python) 不确定他们的代码是否与我这里的js相似 这在python中是什么意思 我从另一