我的问题是:
“假设您的RSA公钥因子为p = 6323和q = 2833,并且
公共指数e是31。假设您收到的密码文本为6627708。编写一个程序,以上述参数为输入,并实现RSA解密功能以恢复纯文本。”

尝试解密密文时,出现错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-30-bb484f24f99a> in <module>
----> 1 cipher.decrypt((str(ciphertext)))

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/Crypto/Cipher/PKCS1_OAEP.py in decrypt(self, ciphertext)
    165         # Step 1b and 1c
    166         if len(ciphertext) != k or k<hLen+2:
--> 167             raise ValueError("Ciphertext with incorrect length.")
    168         # Step 2a (O2SIP)
    169         ct_int = bytes_to_long(ciphertext)

ValueError: Ciphertext with incorrect length.


我的代码目前看起来像:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

n = 17913059
e = 31
p = 6323
q = 2833
d = 13861087
ciphertext = 6627708

key = RSA.construct(rsa_components=(n,e,d,p,q))
cipher = PKCS1_OAEP.new(key)

cipher.decrypt((str(ciphertext)))


我想知道的是,如果我走在正确的轨道上,还是完全脱离了轨道。我不太确定如何解决长度错误。我在想也许我需要像在AES中那样填充,但是我不太确定。先谢谢您的帮助!

最佳答案

如果具有cdn,则可以使用RSA formula来获取密文:

>>> pow(ciphertext, d, n)
205


这似乎是格式错误的消息(它们通常是十六进制或ASCII值),因此这可能只是一个示例问题。

您的问题源自pycryptodome's implementationRFC 7.1.2,其中指出:


  C:要解密的密文,长度为k的八位字节串,其中k = 2hLen + 2


哪里:


  hLen表示哈希函数输出的八位字节长度


因此,从技术上讲,您的密文太短而无法被RSA解密。

关于python - ValueError:长度不正确的密文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58550102/

10-11 03:59