【问题标题】:RSA decrypt returns extra dataRSA 解密返回额外数据
【发布时间】:2015-06-24 19:37:06
【问题描述】:

我可以解密一些通过 openssl 命令行工具加密的数据,但是一些 'extra' 数据与原始数据一起返回。 我创建了一个这样的加密文件:

$ echo 这是它>file.txt

$ openssl rsautl -encrypt -pubin -inkey public.pem -in file.txt -out encrypted.txt

我可以通过以下方式访问原始数据:

from Crypto.PublicKey import RSA
key = open('/tmp/.private.key').read()
rsakey = RSA.importKey(key, 'MyPassphrase')
data = open('/tmp/encrypted.txt', 'rb').read()
original = rsakey.decrypt(data)

但是返回了一些额外的数据,输出是这样的:

\x02h\x83\xcfx\x84,\xb1\xa6 [...] \xcf5\x9f\xbbG\xf1\x14\xd0\x8d\x1f\xfe\x9c4\xbb \x1aB\xfa\xc3b\xc2\xe0K\x85\xb5\x10y\xe1\x8e\x00这是这个\n

我可以避免在解密数据之前接收这些原始数据吗?

Obs.:密钥是使用 openssl 工具创建的

Tks.

【问题讨论】:

  • 你是如何输出original的?
  • 如果 ai print(original) 它显示一些二进制文件,最后是数据: -VM-'~C M-fM-\ ~?~LPOZw^O^S^[M --M-:^WM-4M-,&IM-i^W6 ^\~I )MB"^^_ ~_M-;G^TЍ^_M-~~\4M-;^ZBM-CbM-`K~ EM-5^Py his is it 我可以这样做来获取数据:rsakey.decrypt(data).split('\x00')[1] 但我不确定是否是正确的方法。跨度>

标签: python encryption cryptography openssl


【解决方案1】:

您将获得 PKCS#1 v1.5 填充纯文本。您需要先删除 PKCS#1 v1.5 填充。目前,您正在执行教科书(或“原始”)RSA 解密,这只不过是模幂运算。尝试使用支持 PKCS#1 v1.5 的类,例如 this one

【讨论】:

  • 真的只有PKCS#1 v1.5吗?我一直认为第一个字节一定是0x00,第二个是0x02。这不是这里的情况。
  • @ArtjomB。如果您不将整数转换为固定大小的八位字节流,会发生什么,是的。
  • 大家好。我将尝试@MaartenBodewes 建议的模块。感谢提供的帮助!我非常感谢。
猜你喜欢
  • 1970-01-01
  • 2017-08-26
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
相关资源
最近更新 更多