rsa加密算法python实现
时间: 2023-07-11 21:48:34 浏览: 113
RSA加密算法的Python实现需要使用到Python的`crypto`库,以下是一个简单的RSA加密示例代码:
```python
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# 生成RSA密钥对
key = RSA.generate(2048)
# 获取公钥和私钥
public_key = key.publickey().export_key()
private_key = key.export_key()
# 使用公钥加密数据
cipher = PKCS1_OAEP.new(RSA.import_key(public_key))
encrypted_data = cipher.encrypt(b'Hello, world!')
# 使用私钥解密数据
cipher = PKCS1_OAEP.new(RSA.import_key(private_key))
decrypted_data = cipher.decrypt(encrypted_data)
```
在这个示例中,我们生成了一个2048位的RSA密钥对,然后使用公钥对一个字符串进行加密,再使用私钥对加密后的数据进行解密。在实际应用中,我们通常会将公钥发送给需要加密数据的对方,而私钥则保留在本地以用于解密。注意,RSA加密算法并不适合用于加密大文件,因为它比较慢。
相关问题
RSA加密算法python实现
RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman于1977年发明。Python中可以使用内置库`cryptography`或第三方库`pycryptodome`来实现RSA。以下是基本的RSA加密算法在Python中的一种实现:
```python
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend
# 生成密钥对
def generate_rsa_keys():
key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
private_key = key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
public_key = key.public_key().public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
return private_key, public_key
# 加密函数
def encrypt_message(message, public_key):
encrypted = public_key.encrypt(
message.encode(),
padding=serialization.OAEP(
mgf=serialization.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return encrypted
# 解密函数
def decrypt_message(encrypted_message, private_key):
decrypted = private_key.decrypt(
encrypted_message,
padding=serialization OAEP(
mgf=serialization.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return decrypted.decode()
# 示例
private_key, public_key = generate_rsa_keys()
message = "Hello, RSA!"
encrypted = encrypt_message(message, public_key)
decrypted = decrypt_message(encrypted, private_key)
print(f"原始消息: {message}")
print(f"加密后: {encrypted.hex()}")
print(f"解密后: {decrypted}")
```
rsa加密算法python
RSA是一种非对称加密算法,用于加密的密钥和用于解密的密钥不是同一个。RSA可以根据密钥的大小改变分组大小,如果加密的数据不是分组大小的整数倍,则会根据具体的应用方式增加额外的填充位。在Python中,可以使用Crypto库实现RSA加密算法。具体实现过程包括生成公钥和私钥,加密数据和解密数据,签名和解签等步骤。可以参考以下代码实现RSA加密算法:
```python
from Crypto import Random
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
# 生成随机偏移量
random_generator = Random.new().read
# 生成一个私钥
rsa = RSA.generate(2048, random_generator)
# 导出私钥
private_key = rsa.exportKey()
# 生成私钥所对应的公钥
public_key = rsa.publickey().exportKey()
# 将私钥内容写入文件中
with open('rsa_private_key.pem', 'wb')as f:
f.write(private_key)
# 将公钥内容写入文件中
with open('rsa_public_key.pem', 'wb')as f:
f.write(public_key)
# 加密数据
message = 'Hello, world!'
with open('rsa_public_key.pem', 'rb') as f:
key = f.read()
rsakey = RSA.importKey(key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
cipher_text = cipher.encrypt(message.encode())
# 解密数据
with open('rsa_private_key.pem', 'rb') as f:
key = f.read()
rsakey = RSA.importKey(key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
text = cipher.decrypt(cipher_text, random_generator)
# 签名
with open('rsa_private_key.pem', 'rb') as f:
key = f.read()
rsakey = RSA.importKey(key)
signer = Signature_pkcs1_v1_5.new(rsakey)
digest = SHA.new()
digest.update(message.encode())
sign = signer.sign(digest)
# 验证签名
with open('rsa_public_key.pem', 'rb') as f:
key = f.read()
rsakey = RSA.importKey(key)
verifier = Signature_pkcs1_v1_5.new(rsakey)
digest = SHA.new()
digest.update(message.encode())
is_verify = verifier.verify(digest, sign)
print('加密后的数据:', cipher_text)
print('解密后的数据:', text.decode())
print('签名:', sign)
print('验证签名结果:', is_verify)
```
阅读全文