专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

Flask应用程序中使用RSA加密和解密

ins518 2024-10-10 10:01:34 技术文章 10 ℃ 0 评论

在Flask应用程序中使用RSA加密和解密通常涉及以下步骤:

生成RSA密钥对(公钥和私钥)。

使用公钥对用户输入的密码进行加密。

将加密的密码发送到服务器。

服务器使用私钥对加密的密码进行解密。

解密后的密码可以用于验证用户身份。

以下是一个简化的例子,展示了如何在Flask应用中使用RSA进行加密和解密:

from flask import Flask, request, jsonify
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization, asynchronous
from cryptography.hazmat.primitives.asymmetric import padding

app = Flask(__name__)

# 生成RSA密钥对
def generate_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

# 加密函数
def rsa_encrypt(message, public_key):
encryptor = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return encryptor

# 解密函数
def rsa_decrypt(encrypted_message, private_key):
decryptor = private_key.decrypt(
encrypted_message,
padding.OAEP(
mgf=padding.MGF1(hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return decryptor

# 初始化密钥
private_key, public_key = generate_keys()

@app.route('/encrypt', methods=['POST'])
def encrypt():
data = request.json
password = data['password'].encode('utf-8')
encrypted_password = rsa_encrypt(password, public_key)
return jsonify({'encrypted_password': encrypted_password}), 200

@app.route('/decrypt', methods=['POST'])
def decrypt():
data = request.json
encrypted_password = data['encrypted_password'].encode('utf-8')
decrypted_password = rsa_decrypt(encrypted_password, private_key)
return jsonify({'decrypted_password': decrypted_password.decode('utf-8')}), 200

if __name__ == '__main__':
app.run(debug=True)


在这个例子中:

generate_keys 函数用来生成RSA密钥对。

rsa_encrypt 和 rsa_decrypt 函数分别用于加密和解密数据。

/encrypt 端点接受POST请求,加密用户的密码,并返回加密后的密码。

/decrypt 端点接受POST请求,使用私钥解密加密的密码,并返回解密后的密码。

注意事项:

实际部署中,私钥不应暴露在前端或易于访问的地方,而应该保存在安全的环境中(如服务器的文件系统中,且权限限制仅对必要的服务开放)。

RSA加密适用于小块数据的加密,对于大块数据,通常会先用对称加密算法加密数据,然后用非对称加密算法加密对称加密的密钥。

为了提高安全性,实际应用中还需要考虑使用HTTPS来保护数据在传输过程中的安全。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表