在Python中利用RSAPublicNumbers类生成RSA公钥数字,构建安全通信系统
发布时间:2024-01-18 22:40:21
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于数据加密和数字签名等领域。在Python中,我们可以使用cryptography库来生成RSA公钥数字,并构建安全通信系统。
首先,我们需要安装cryptography库。可以使用以下命令在终端中安装:
pip install cryptography
接下来,让我们通过一个例子来说明如何生成RSA公钥数字,并构建简单的安全通信系统。
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.serialization import load_pem_private_key, load_pem_public_key
# 生成RSA公私钥对
def generate_rsa_keys():
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
public_key = private_key.public_key()
return private_key, public_key
# 保存RSA私钥到PEM文件
def save_private_key(private_key, filename):
pem = private_key.private_bytes(
encoding='utf-8',
format='PEM',
encryption_algorithm=serialization.NoEncryption()
)
with open(filename, 'wb') as f:
f.write(pem)
# 保存RSA公钥到PEM文件
def save_public_key(public_key, filename):
pem = public_key.public_bytes(
encoding='utf-8',
format='PEM',
)
with open(filename, 'wb') as f:
f.write(pem)
# 加载RSA私钥
def load_private_key(filename):
with open(filename, 'rb') as f:
pem_data = f.read()
return load_pem_private_key(pem_data, None, default_backend())
# 加载RSA公钥
def load_public_key(filename):
with open(filename, 'rb') as f:
pem_data = f.read()
return load_pem_public_key(pem_data, default_backend())
# 使用RSA公钥加密数据
def encrypt(public_key, data):
encrypted_data = public_key.encrypt(
data.encode(),
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return encrypted_data
# 使用RSA私钥解密数据
def decrypt(private_key, encrypted_data):
decrypted_data = private_key.decrypt(
encrypted_data,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return decrypted_data.decode()
# 生成RSA密钥对
private_key, public_key = generate_rsa_keys()
# 保存RSA私钥到文件
save_private_key(private_key, 'private.pem')
# 保存RSA公钥到文件
save_public_key(public_key, 'public.pem')
# 加载RSA私钥
loaded_private_key = load_private_key('private.pem')
# 加载RSA公钥
loaded_public_key = load_public_key('public.pem')
# 加密数据
encrypted_data = encrypt(loaded_public_key, 'Hello, World!')
# 解密数据
decrypted_data = decrypt(loaded_private_key, encrypted_data)
print(decrypted_data) # 输出:Hello, World!
该例子首先定义了一系列用于生成RSA密钥对、保存密钥到文件、加载密钥等操作的函数。然后通过调用这些函数,生成RSA密钥对,并保存到PEM文件中。使用加载后的密钥,可以对数据进行加密和解密操作。在这个例子中,我们使用公钥对数据进行加密,然后使用私钥对加密后的数据进行解密。最后,输出解密后的数据Hello, World!。
通过上述代码,我们可以利用cryptography库生成RSA公钥数字,并构建简单的安全通信系统。通信双方可以交换公钥,使用公钥进行加密发送数据,接收方使用私钥进行解密。这样,即使在不安全的网络环境中,数据也能够得到保护,确保安全性和完整性。
