处理大整数时RSA算法输出出错

时间:2013-07-23 20:57:46

标签: python cryptography rsa

为了实现RSA加密,我编写了生成伪随机素数,公钥/私钥等的代码(用于个人娱乐,仅此而已)。当编码文本为整数~10 ^ 12或更小时,我能够成功编码文本,生成公钥/私钥,加密,解密和解码。 e.g。

original message: hello
plaintext equivalent: 448378203247
public key: (540594823829, 65537)
private key: (540594823829, 261111754433)
ciphertext: 63430225682

成功解密密文会返回原始明文。

但是,当我的编码文本是一个更大的整数时,该过程将失败。 e.g。

original message: a man a plan a canal panama
plaintext equivalent: 39955594125525792198857762901926727877852838348601974063966023009
public key: (662173326571, 65537)
private key: (662173326571, 29422219265)
ciphertext: 429717871098

在这种情况下,密文比明文要小得多,这使得人们怀疑加密过程中的某些内容出错了。果然,我解密了密文并获得了58514793315(显然不是原始明文)。

我认为问题是Python如何使用大数字实现大数字/计算,以及我不知道如何处理它的事实。我的代码加密/解密的价值仅仅是

pow(m, e, n) # plaintext, encryption exponent, modulus
pow(c, d, n) # ciphertext, decryption exponent, modulus

和编码文本的代码来自 http://gist.github.com/barrysteyn/4184435#file_convert_text_to_decimal.py

如何确保使用这些大整数进行计算(并且不会导致截断/错误答案)?

1 个答案:

答案 0 :(得分:3)

在不将消息分成块的情况下,您只能使用RSA加密小于模数的消息。如果您将此作为编程练习,请不要尝试加密大于模数的任何内容。如果您将此作为实际加密,不要。获取加密库。做自己的加密是灾难的一种方法。