rsa加密算法小程序 rsa加密算法代码

小编 09-08 10

RSA加密算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出,因此得名RSA,它基于一个简单的数论事实:将两个大质数相乘是容易的,但反过来分解它们的乘积却是非常困难的,RSA算法正是利用了这一特性来实现加密和解密。

rsa加密算法小程序 rsa加密算法代码

下面是一个简单的RSA加密算法的Python实现示例:

import random
求最大公约数
def gcd(a, b):
    while b != 0:
        a, b = b, a % b
    return a
求模逆元
def mod_inverse(e, phi):
    m0, x0, x1 = phi, 0, 1
    while e > 1:
        q = e // m0
        m, e = m0, e % m0
        x0, x1 = x1 - q * x0, x0
    if x1 < 0:
        x1 += phi
    return x1
随机生成质数
def is_prime(n):
    if n <= 1:
        return False
    if n <= 3:
        return True
    if n % 2 == 0 or n % 3 == 0:
        return False
    i = 5
    while i * i <= n:
        if n % i == 0 or n % (i + 2) == 0:
            return False
        i += 6
    return True
def generate_prime(k):
    while True:
        randid = random.randint(2(k - 1), 2k - 1)
        if is_prime(randid):
            return randid
生成公钥和私钥
def generate_keys(bits=1024):
    p = generate_prime(bits // 2)
    q = generate_prime(bits // 2)
    n = p * q
    phi = (p - 1) * (q - 1)
    e = random.randint(1, phi - 1)
    g = gcd(e, phi)
    while g != 1:
        e = random.randint(1, phi - 1)
        g = gcd(e, phi)
    d = mod_inverse(e, phi)
    return ((e, n), (d, n))
加密
def encrypt(pk, plaintext):
    key, n = pk
    cipher = [pow(ord(char), key, n) for char in plaintext]
    return cipher
解密
def decrypt(pk, ciphertext):
    key, n = pk
    plain = [chr(pow(char, key, n)) for char in ciphertext]
    return ''.join(plain)
主函数
def main():
    bits = 1024
    key_pair = generate_keys(bits)
    public_key, private_key = key_pair
    message = input("Enter the message to encrypt: ")
    encrypted_msg = encrypt(public_key, message)
    print("Encrypted:", encrypted_msg)
    decrypted_msg = decrypt(private_key, encrypted_msg)
    print("Decrypted:", decrypted_msg)
if __name__ == "__main__":
    main()

这个程序首先定义了一些辅助函数,包括求最大公约数、求模逆元、随机生成质数和判断质数,然后定义了生成公钥和私钥的函数,以及加密和解密函数,主函数中生成了一对密钥,对用户输入的消息进行加密和解密,并打印结果。

请注意,这个示例是为了教学目的而简化的,实际应用中需要考虑更多的安全性问题,比如密钥长度、随机数生成器的安全性等,这个程序没有实现填充机制,因此在处理非加密块大小的消息时可能会有问题,在实际应用中,应该使用成熟的加密库,如Python的cryptography库,来处理加密和解密。

The End
微信