当前位置:首页python > 正文

Python的rsa加密算法代码

作者:野牛程序员:2023-07-05 08:40:18python阅读 2814

以下是使用Python编写的RSA加密算法代码示例:

import random

# 求解最大公约数
def gcd(a, b):
    while b != 0:
        a, b = b, a % b
    return a

# 求解模反元素
def mod_inverse(a, m):
    if gcd(a, m) != 1:
        return None
    u1, u2, u3 = 1, 0, a
    v1, v2, v3 = 0, 1, m
    while v3 != 0:
        q = u3 // v3
        v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3
    return u1 % m

# 生成素数
def generate_prime_number(bit_length):
    while True:
        p = random.randint(2**(bit_length-1), 2**bit_length)
        if is_prime(p):
            return p

# 判断是否为素数
def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True

# RSA密钥生成
def generate_rsa_key(bit_length):
    p = generate_prime_number(bit_length)
    q = generate_prime_number(bit_length)
    n = p * q
    phi = (p - 1) * (q - 1)
    while True:
        e = random.randint(2, phi)
        if gcd(e, phi) == 1:
            break
    d = mod_inverse(e, phi)
    return ((e, n), (d, n))

# RSA加密
def rsa_encrypt(message, public_key):
    e, n = public_key
    encrypted_message = [pow(ord(char), e, n) for char in message]
    return encrypted_message

# RSA解密
def rsa_decrypt(encrypted_message, private_key):
    d, n = private_key
    decrypted_message = ''.join([chr(pow(char, d, n)) for char in encrypted_message])
    return decrypted_message

# 测试示例
bit_length = 1024
message = "Hello, RSA!"

# 生成密钥对
public_key, private_key = generate_rsa_key(bit_length)

# 加密消息
encrypted_message = rsa_encrypt(message, public_key)

# 解密消息
decrypted_message = rsa_decrypt(encrypted_message, private_key)

print("原始消息:", message)
print("加密后的消息:", encrypted_message)
print("解密后的消息:", decrypted_message)

这个示例代码演示了如何使用Python实现RSA加密算法。代码中的generate_rsa_key函数用于生成RSA密钥对,rsa_encrypt函数用于加密消息,rsa_decrypt函数用于解密消息。在示例中,我们首先生成了一个1024位的RSA密钥对,然后使用公钥加密了消息"Hello, RSA!",最后使用私钥解密得到原始消息。请注意,RSA算法适用于加密较小长度的数据,因此在实际使用中可能需要根据需求调整密钥长度。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击