编写RSA程序,加密一段文字,了解RSA算法原理。尝试加密1M和1G的文字,记录程序的运行时间。
时间: 2024-03-27 08:42:09 浏览: 92
RSA算法实现加密解密文字
RSA算法是一种非对称加密算法,它的加密和解密使用不同的密钥。RSA算法的安全性基于大素数分解的困难性,因此RSA算法的关键是选择足够大的素数。以下是一个简单的RSA加密算法的Python实现:
```python
import random
import time
# 生成大素数
def generate_prime_number():
while True:
p = random.randint(10000000, 20000000)
if is_prime(p):
return p
# 判断素数
def is_prime(n):
if n == 2 or n == 3:
return True
if n < 2 or n % 2 == 0:
return False
if n < 9:
return True
if n % 3 == 0:
return False
r = int(n ** 0.5)
f = 5
while f <= r:
if n % f == 0:
return False
if n % (f + 2) == 0:
return False
f += 6
return True
# 扩展欧几里得算法求模反元素
def exgcd(a, b):
if b == 0:
return 1, 0, a
else:
x, y, gcd = exgcd(b, a % b)
x, y = y, (x - a // b * y)
return x, y, gcd
# 生成密钥对
def generate_key_pair():
p = generate_prime_number()
q = generate_prime_number()
n = p * q
phi_n = (p - 1) * (q - 1)
while True:
e = random.randint(10001, phi_n - 1)
x, y, gcd = exgcd(e, phi_n)
if gcd == 1:
break
d = x % phi_n
return (n, e), (n, d)
# 加密函数
def encrypt(message, public_key):
n, e = public_key
return pow(message, e, n)
# 解密函数
def decrypt(ciphertext, private_key):
n, d = private_key
return pow(ciphertext, d, n)
# 测试
if __name__ == '__main__':
message = input("请输入要加密的消息:")
message = int.from_bytes(message.encode(), 'big') # 将字符串转换为整数
public_key, private_key = generate_key_pair()
start_time = time.time()
ciphertext = encrypt(message, public_key)
end_time = time.time()
print("加密后的密文为:", ciphertext)
print("加密程序运行时间为:", end_time - start_time, "秒")
start_time = time.time()
decrypted_message = decrypt(ciphertext, private_key)
end_time = time.time()
decrypted_message = decrypted_message.to_bytes((decrypted_message.bit_length() + 7) // 8, 'big').decode()
print("解密后的消息为:", decrypted_message)
print("解密程序运行时间为:", end_time - start_time, "秒")
```
这个程序可以加密任意长度的消息,但是加密1M和1G的文字需要极长的运行时间,实际上是不可行的。RSA算法的加密和解密操作都涉及大整数的乘法、幂运算和模运算,这些操作都非常耗时。因此,在实际应用中,RSA算法通常只用于加密密钥等小数据,而不是长文本。如果需要加密长文本,可以使用对称加密算法,例如AES等。
阅读全文