python编程实现RSA加解密。提供大素数生成功能包含三种方式,与用户进行交互使其选择其中之一;一是可产生长度最高可达300位的十六进制(约合360位十进制)大素数,可以导出素数,二是也可以从文件primenumber.txt中导入素数,三是还可以产生一个指定长度的随机大素数。
时间: 2024-09-09 11:06:37 浏览: 39
基于python的RSA算法数字签名生成软件源码数据库.zip
5星 · 资源好评率100%
Python中实现RSA加密算法需要使用到`cryptography`库,其中包含了生成大素数、创建密钥对以及进行加解密的基本操作。下面是一个简化的步骤和示例:
首先,确保安装了`cryptography`库(如果没有安装,可以使用`pip install cryptography`命令安装)。
1. **生成大素数**:
- **手动输入法**(最长300位):
```python
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import rsa
def generate_large_prime(length=300):
while True:
prime = get_random_base16_number(length) # 自定义函数,生成指定长度的十六进制大素数
if is_prime(prime): # 检查是否为素数
return int(prime, 16)
def get_random_base16_number(length):
# 生成指定长度的随机十六进制字符串并转为整数
return hex(random.randint(2**(length * 4), (2**(length * 4 + 1)) - 1))[2:]
def is_prime(n, _min=5, _max=int(1e6)):
if n < 2:
return False
for i in range(_min, _max):
if n % i == 0:
return False
return True
```
- **从文件读取**:
```python
with open('primenumber.txt', 'r') as file:
prime = int(file.readline().strip(), 16)
```
- **随机生成指定长度**:
```python
def generate_random_prime(length):
return rsa.generate_private_key(public_exponent=65537, key_size=length * 8).public_numbers()[0]
```
2. **创建密钥对**:
```python
def create_rsa_keys():
private_key = generate_large_prime()
public_key = private_key.publickey()
return private_key, public_key
```
3. **RSA 加解密**:
```python
def encrypt_message(message, public_key):
ciphertext = public_key.encrypt(message.encode(), padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None))
return ciphertext
def decrypt_message(ciphertext, private_key):
plaintext = private_key.decrypt(ciphertext, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None))
return plaintext.decode()
```
阅读全文