【问题标题】:Error in RSA algorithm output when dealing with large integers处理大整数时 RSA 算法输出错误
【发布时间】:2013-07-24 05:01:33
【问题描述】:

为了实现 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

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

【问题讨论】:

    标签: python cryptography rsa


    【解决方案1】:

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

    【讨论】:

    • 您能否澄清一下我如何将明文分成块(例如,将其简单地分成 5 个块,加密,然后将这些块重新组合在一起是否可行)?是的,这只是一个学习练习/我的娱乐。
    • 如果你是为了好玩,那就行了。也可以用基数N 表示数字,其中N 是模数,然后分别加密数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2019-05-11
    • 1970-01-01
    相关资源
    最近更新 更多