我正在使用python的库加密技术实现RSA算法,但是当出现以下异常时我停止了:
ValueError: Ciphertext length must be equal to key size.
从我收集的内容来看,这似乎是对库本身的限制,而不是其他库实现的常见。
当我尝试解密以前加密的邮件时会引发此异常,但我该怎么做才能避免它?当我创建公钥和私钥时,我无法知道密文(加密消息)的长度,我稍后会得到...我真的可以控制它吗?
我认为问题在于密钥的创建,我一直试图在原始解密消息上给出相同数量的位作为参数来创建具有相同大小的位的密钥,但它是仍然提出同样的例外......
我一直用它来查找原始邮件的位数,也许我做错了??
m = message
m.encode(encoding='UTF-8',errors='strict')
bits = len(m)*4*8
编辑:
我的代码很长,因为它还有其他东西,但我可以提出一些关键点
privateKeySender , publicKeySender = generateKeys(bits)
privatekeyReceptor, publickeyReceptor = generateKeys(bits)
ciphertext = myencrypt(publickeyReceptor , message)
signature = sign(ciphertext, publickeyReceptor )
decryptMessage = mydecrypt(ciphertext, privatekeyReceptor)
validation = validateSignature(message,signature, publicKeySender)
解密方法
引发异常def mydecrypt(ciphertext, privateKey):
ciphertextD = base64.b64decode(ciphertext) if not isinstance(ciphertext, bytes) else ciphertext
message= privateKey.decrypt(
ciphertextD,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA1()),
algorithm=hashes.SHA1(),
label=None
)
)
message= str(message)
message.encode(encoding='UTF-8',errors='strict')
return message
答案 0 :(得分:0)
问题在于密文的编码,它没有在加密方法上编码。