rsa加密算法小程序 rsa加密算法代码
RSA加密算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出,因此得名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
还没有评论,来说两句吧...