0

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

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

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

但是,当我的编码文本是一个较大的整数时,该过程将失败。例如

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

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

4

1 回答 1

3

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

于 2013-07-23T21:01:33.553 回答