使用RSA加密

时间:2018-12-06 21:30:15

标签: python encryption cryptography rsa public-key-encryption

我正在尝试对自己的RSA实现进行编程,但是遇到了一些麻烦。

我有分别包含(n,e)和(n,d)的私钥和公钥,但是我不确定如何使用它们进行加密。我已经将希望加密的纯文本编码为一个非常大的整数-就像在加密的情况下将数字增加e一样简单吗?我对此表示怀疑,因为尽管我确定我需要在任何地方都不使用n。

这是我的代码:

def encrypt(self, plaintext_file, encrypted_file):
    with open(plaintext_file, 'rb') as fin:
        plaintext_bin = fin.read()
        plaintext = plaintext_bin.decode('utf-8')

    with open("public.txt", "r") as fin:
        lines = fin.readlines()
        n, e = int(lines[0].strip()), int(lines[1].strip())

    alphabet = ".,?! \t\n\rabcdefcdghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    encoded = self.to_base10(plaintext, alphabet)
    encrypted = pow(encoded, e)  # is this right?

我也很好奇如何解密以验证它是否正常工作。

1 个答案:

答案 0 :(得分:1)

RSA的Wikipedia page包含精确的加密算法。

c = m^e mod n

您需要在通话n的末尾添加pow

encrypted = pow(encoded, e, n)

然后您可以通过以下方式解密:

plaintext = pow(encrypted, d, n)