python Django RSA 前台加密 后端解密。

第一步    安装  pip install pycryptodomex

第二步  生成 公钥和密钥 直接运行 main方法    公钥加密  私钥解密 

"""
create_rsa_key() - 创建RSA密钥
"""
from Cryptodome import Random

from Cryptodome.PublicKey import RSA
def create_rsa_key():
    """
    创建RSA密钥
    步骤说明:
    1、从 Crypto.PublicKey 包中导入 RSA,创建一个密码
    2、生成 1024/2048 位的 RSA 密钥
    3、调用 RSA 密钥实例的 exportKey 方法,传入口令、使用的 PKCS 标准以及加密方案这三个参数。
    4、将私钥写入磁盘的文件。
    5、使用方法链调用 publickey 和 exportKey 方法生成公钥,写入磁盘上的文件。
    """
    # 利用伪随机数来生成私钥和公钥
    random_generator = Random.new().read

    key = RSA.generate(2048,random_generator) #生成 1024/2048 位的 RSA 密钥
    encrypted_key = key.exportKey() #密钥实例
    with open("my_private_rsa_key.bin", "wb") as f:#私钥写入磁盘
        f.write(encrypted_key)
    with open("my_rsa_public.pem", "wb") as f: #公钥写入磁盘
        f.write(key.publickey().exportKey())

if __name__ == '__main__':
    create_rsa_key()

生成的两个 私钥 和公钥     也可以用个变量存储。 

 

第三步 后台解密 

import os
from Cryptodome.PublicKey import RSA
from Cryptodome.Cipher import  PKCS1_v1_5
import base64
from urllib import parse
from django.shortcuts import render
from django.http import *
# 当前路径钥匙地址
curr_dir = os.path.dirname(os.path.realpath(__file__))
private_key_file = os.path.join(curr_dir, "my_private_rsa_key.bin") #密钥
public_key_file = os.path.join(curr_dir, "my_rsa_public.pem")  #公钥


#解码
def decrypt_data(inputdata):
    # URLDecode
    data = parse.unquote(inputdata)
    # base64decode
    data = base64.b64decode(data)
    # 读取密钥
    private_key = RSA.import_key(
        open(curr_dir + "/my_private_rsa_key.bin").read())
    # 使用 PKCS1_v1_5解密
    cipher_rsa = PKCS1_v1_5.new(private_key)
    # 当解密失败,会返回 sentinel
    sentinel = None
    ret = cipher_rsa.decrypt(data, sentinel)
    return ret.decode() #解码
#自定义注解 过滤GET和POST请求解码 。
def ouou_decode(fun):
    def check(request,*args,**kwargs):
        if "GET" == request.method:
            request.GET = request.GET.copy() #request设置可以修改
            for  i  in  list(request.GET):
                request.GET[i] = decrypt_data(request.GET[i])#解码
        elif "POST" == request.method:
            request.POST = request.POST.copy()
            for  i  in  list(request.POST):
                request.POST[i] = decrypt_data(request.POST[i])
        return fun(request, *args, **kwargs)
    return check

 

需要解密的方法加入 该注解,在访问方法时,根据请求判断进行解码。

python Django RSA 前台加密 后端解密。_第1张图片

 

第四步 前台加密和 解密    前后端 使用公钥和密钥必须一致。

 



  
    JavaScript RSA Encryption
    
    
    
  
  

    






 

demo下载  https://download.csdn.net/download/xianailili/10833641

 

 

你可能感兴趣的:(python Django RSA 前台加密 后端解密。)