ValueError: Ciphertext with incorrect length
ValueError: Ciphertext with incorrect length
我遇到一个问题:
“假设您的 RSA public-关键因素是 p = 6323 和 q = 2833,并且
public指数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)))
我更想知道我是在正确的轨道上,还是完全偏离了 rails。我不太确定如何修复长度错误。我在想也许我需要像 AES 那样填充,但我不太确定。在此先感谢您的帮助!
如果有c
、d
、n
,可以用RSA formula得到密文:
>>> pow(ciphertext, d, n)
205
这似乎是一条格式错误的消息(它们通常是十六进制或 ASCII 值)所以这可能只是一个示例问题。
您的问题源于 pycryptodome's implementation of RFC 7.1.2,其中指出:
C: ciphertext to be decrypted, an octet string of length k, where k = 2hLen + 2
其中:
hLen denotes the length in octets of the hash function output
所以,从技术上讲,您的密文太短,RSA 无法解密。
我遇到一个问题: “假设您的 RSA public-关键因素是 p = 6323 和 q = 2833,并且 public指数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)))
我更想知道我是在正确的轨道上,还是完全偏离了 rails。我不太确定如何修复长度错误。我在想也许我需要像 AES 那样填充,但我不太确定。在此先感谢您的帮助!
如果有c
、d
、n
,可以用RSA formula得到密文:
>>> pow(ciphertext, d, n)
205
这似乎是一条格式错误的消息(它们通常是十六进制或 ASCII 值)所以这可能只是一个示例问题。
您的问题源于 pycryptodome's implementation of RFC 7.1.2,其中指出:
C: ciphertext to be decrypted, an octet string of length k, where k = 2hLen + 2
其中:
hLen denotes the length in octets of the hash function output
所以,从技术上讲,您的密文太短,RSA 无法解密。