Rsa 加密的使用

这篇具有很好参考价值的文章主要介绍了Rsa 加密的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Rsa 加密的使用

概述:AES 和 DES 都是对称加密算法,加密和解密的时候都是相同的密钥;非对称加密算法加密和解密的密钥是不相同的,分为公钥和私钥;最常见的非对称加密算法是RSA加密算法!

公钥: 公开的密钥,对数据进行加密
私钥: 私密的密钥,对数据进行解密

非对称加密算法在使用的时候,通常会将公钥发送给客户端,客户端将数据进行加密之后发送给服务端,服务端使用私钥进行解密,获取传递的数据信息;因此非对称加密相对于对称加密的算法安全性更高,即使公钥被获取之后,信息仍旧是安全的;

常见的非对称加密的算法有:RSA,DSA,RSA是使用比较广泛的非对称加密算法;

1.RSA 加密解密

安装:

pip install pycryptodome

RSA 在加密之前,需要首先创建公钥和私钥;

1.1 获取密钥信息

密钥分为公钥和私钥,在数据加密之前进行获取,通常会存储在.pem文件中进行保存,特别注意要保护私钥的安全;

# -*- coding: utf-8 -*-
"""使用 RSA 加密算法
"""
import base64

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
from Crypto import Random

gen_random = Random.new  # 随机标志,类似算法的随机种子;

# 生成密钥
rsa_key = RSA.generate(1024)  # 生成密钥的长度; 1024,2048,3072三个长度的值
# print(rsa_key.public_key().export_key())

with open("rsa_key.pem", 'wb') as fp:
    # 将公钥写入文件,公钥的值是字节的类型
    fp.write(rsa_key.public_key().export_key())

with open("pri_key.pem", 'wb') as fp:
    # 将私钥写入二进制文件;
    fp.write(rsa_key.export_key())

Rsa 加密的使用

1.2 数据加密

数据加密的主要步骤是加载公钥信息,实例化加密器,进行数据加密;

# -*- coding: utf-8 -*-
""" 数据实现 RSA 加密解密;
"""
import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5

data = "现在已经十点多了,有点困"
with open("rsa_key.pem", mode="r") as fp:
    public_key = fp.read()  # 读取公钥信息
    rsa_key = RSA.importKey(public_key)  # 返回公钥对象;
    # 创建 rsa 加密的加密器
    rsa = PKCS1_v1_5.new(rsa_key)
    # 进行数据的加密
    result = rsa.encrypt(data.encode("utf-8"))
    # 将加密后的字节信息处理成 base64 的字符串信息;
    b64_result = base64.b64encode(result).decode("utf-8")
    print(b64_result)

Rsa 加密的使用

1.3 数据解密

与加密方式相似;

# -*- coding: utf-8 -*-
""" 数据实现 RSA 加密解密;
"""
import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5

data = "JA6PCrJCj7Hw2/szF3SOoCcPqpx6A32JCShYq9HpAL59DTy0hjuPs65zxj3gVeKiibQ9efX0A7o6tbFEkdfhPz9TK8GfraN8oMHbjQMBA9Tbw4EDFHIc/F+TCJLrCBtY156jF+QSjL8y2IcWgQsYBZ90LxFcbtE6RVPgqRdn7b4="
with open("pri_key.pem", 'r') as fp:
    # 读取私钥
    pri_key = fp.read()
    # 加载私钥对象
    rsa_key = RSA.importKey(pri_key)
    # 构建解密器
    rsa = PKCS1_v1_5.new(rsa_key)
    # 进行数据解密,解密前需要现将base64进行解码;
    result = rsa.decrypt(base64.b64decode(data), None)
    print(result.decode("utf-8"))

Rsa 加密的使用

1.4 rsa 加密的封装

# -*- coding: utf-8 -*-
""" 封装 RSA 算法的加密流程信息;
"""
import os

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5


class RsaUtil(object):
    """封装 RSA 加密算法的常用方法;
    """

    SECRET_KEY_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'key')

    @classmethod
    def get_secret_key(cls, key_length: int, public_key_name: str, private_key_name: str):
        """
        获取加密使用的公钥和私钥信息;
        :param key_length: 获取迷密钥的长度信息,限制取值: 1024,2048,3072;
        :param public_key_name: 存放公钥信息的文件名称, 建议使用 .pem 形式的文件;
        :param private_key_name: 存放私钥文件的名称, 建议使用 .pem 形式的文件;
        :return: None
        """
        rsa_key = RSA.generate(key_length)
        file_public = os.path.join(cls.SECRET_KEY_PATH, public_key_name)
        file_private = os.path.join(cls.SECRET_KEY_PATH, private_key_name)
        # 将公钥写进文件中
        with open(file_public, "wb") as fp:
            fp.write(rsa_key.public_key().export_key())
        # 将私钥写进文件中
        with open(file_private, "wb") as fp:
            fp.write(rsa_key.export_key())

    @classmethod
    def encrypt_data(cls, public_key_name: str, data: bytes) -> bytes:
        """
        rsa 的数据加密;
        :param public_key_name: 数据加密使用的公钥文件的名称;
        :param data: 被加密的字节信息;
        :return: bytes; 加密返回的字节信息;
        """
        file_name = os.path.join(cls.SECRET_KEY_PATH, public_key_name)
        with open(file_name, "r") as fp:
            # 读取公钥信息,创建密钥对象
            public_key = fp.read()
            rsa_key = RSA.importKey(public_key)
            # 创建 rsa 加密器
            rsa = PKCS1_v1_5.new(rsa_key)
            # 进行数据的加密;
            result = rsa.encrypt(data)
            return result

    @classmethod
    def decrypt_data(cls, private_key_name: str, data: bytes) -> bytes:
        """
        数据信息的解密;
        :param private_key_name: 解密使用的私钥文件名称;
        :param data: 被加密后的字节信息;
        :return: bytes; 返回解密后的信息;
        """
        file_name = os.path.join(cls.SECRET_KEY_PATH, private_key_name)
        with open(file_name,'r') as fp:
            # 读取私钥信息,实例化私钥对象
            private_key = fp.read()
            rsa_key = RSA.importKey(private_key)
            # 构建解密器
            rsa = PKCS1_v1_5.new(rsa_key)
            # 进行数据的解密
            result = rsa.decrypt(data, None)
            return result


if __name__ == '__main__':
    # 1. 数据加密测试;
    v = RsaUtil.encrypt_data("public_key.pem", "吃了吗?".encode("utf-8"))
    print(v)  # 前后端传输中的时候可以使用base64将字节信息进行编码
    # 2. 数据解密测试;
    sv = RsaUtil.decrypt_data("private_key.pem", v)
    print(sv.decode())

Rsa 加密的使用

2.RSA在前后端的使用

在前后端交互中,RSA 通常是在前端完成数据的加密,将公钥放置在前端中,即使公钥暴露数据信息仍然是无法被解密得到;

2.1 RSA 在前端的使用

参考文章:https://blog.csdn.net/gkf6104/article/details/125848597

使用的第三方库:https://github.com/travist/jsencrypt,依赖于jsencrypt

import JSEncrypt from 'jsencrypt';
const encryptor = new JSEncrypt();
const pubKey = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArBYpsjeeE7RG8XBsCbxf
Ra38w/ktBkqQvwDdkYCNt4M6w24AiEgIKRHeKti4abEf+xRESWmKADkaeiX2lX4D
1R2TiTtFAEpOsubfcndJD1hEYYM9MBjya9nS+6OtZV40R3emevXUbjyQsmCWN2Pc
M3dPvawRDgRj+BEtTHSY7VORhDTcvWfKWgvkc98IGxPVbCB2XEwwBBfRSUapl/pp
lhkefnfPZutv+SOXbGFYdImAeJozQYfVeMBdHlTvJP7nFvowCuM5YkCLq7X8L6cX
1FiaoEzM7oXia3tkrtUnCH4ar1tHjQbZnXn4m63gtEKnEgFsKo1IWDdAK4dXCMO/
8wIDAQAB
-----END PUBLIC KEY-----';
encryptor.setPublicKey(pubKey);
const enPassword = encryptor.encrypt(password)

2.2 RSA 在后端的使用

RSA 在后端主要是使用私钥,加密前端传递过来的数据进行处理,解密之后数据进行一系列的操作;

# -*- coding: utf-8 -*-

from flask import Flask, request, jsonify
from utils.rsa_utils import RsaUtil

app = Flask(__name__)


@app.route('/home')
def index():
    data = request.args.get("data")
    data_decrypt = RsaUtil.decrypt_data("private_key.pem", data.encode())
    # 解密后可以进行数据的校验与存储等操作
    print(data_decrypt)
    return "请求成功执行"

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

继续努力,终成大器;文章来源地址https://www.toymoban.com/news/detail-443939.html

到了这里,关于Rsa 加密的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 4.Java开源RSA/SM2非对称加密算法对比介绍

    前期内容导读: Java开源RSA/AES/SHA1/PGP/SM2/SM3/SM4加密算法介绍 Java开源AES/SM4/3DES对称加密算法介绍及其实现 Java开源AES/SM4/3DES对称加密算法的验证说明 非对称加密 主要是指 秘钥对 是非对称的(相对于 对称加密 而言),简单理解就是加密秘钥和解密秘钥不同,一般叫做公钥和私

    2024年02月14日
    浏览(15)
  • JS使用RSA非对称加密方式加密传输数据

    场景:出于安全考虑,要求对页面提交的关键信息进行加密,在网络传输过程中使用密文传递,在服务器端解密后使用。这样不管在浏览器端还是网络传输中截获了数据,都无法获取实际的信息。 方法:使用非对称加密算法,在前端页面使用公钥进行加密,在后端服务使用密

    2023年04月08日
    浏览(11)
  • 使用非对称加密(RSA) 实现前端加密后端解密

    使用非对称加密(RSA) 实现前端加密后端解密

    数据加密方式有: 单向加密、对称加密、非对称加密、加密盐、散列函数、数字签名。 1、单向加密 单向加密通过对数据进行摘要计算生成密文,密文不可逆推还原。只能加密,不能解密,常用于提取数据的指纹信息以此来验证数据的完整性。但是会引发雪崩效应(雪崩效应

    2024年02月08日
    浏览(49)
  • 【crypto++使用】使用crypto++库函数运行RSA非对称加密

    【crypto++使用】使用crypto++库函数运行RSA非对称加密

    1.(全网最详细攻略)【Crypto++】在Visual studio2022中运行Cryptopp crypto++是一个开源密码学函数库,里面含有很多加密函数的库供大家引用,在官网中也能看到许多代码示范样例。 本文将记录如何使用开发环境:visual studio,引用crypto++的库编写RSA加密的代码。 RSA的安全性依赖于大

    2024年02月11日
    浏览(11)
  • Java RSA加解密-非对称加密-公钥私钥加解密(使用hutool工具)

    Java RSA加解密-非对称加密-公钥私钥加解密(使用hutool工具)

    之前一篇帖子(https://blog.csdn.net/u014137486/article/details/136413532)展示了使用原生Java进行RSA加解密,本文介绍下使用当下流行的Hutool工具进行RSA加解密的用法。 目录 一、在Linux环境下生成公钥、私钥文件 二、将生成的公私钥文件导入项目中并移除pem文件的前后公私钥标记 三、po

    2024年04月23日
    浏览(192)
  • 非对称加密-RSA

    非对称加密-RSA

    1.对称加密 对称密码的核心是一把密钥, 使用相同的密钥进行加密和解密。 如移位密码、 S-DES 但密匙本身也是信息,对称密码中它的安全得不到保障。 2.非对称加密 非对称密码的核心是公钥和私钥。 公钥是用于加密数据的密钥,而私钥则用于解密数据 发送方使用接收方的

    2024年02月19日
    浏览(12)
  • 一文搞懂对称加密与非对称加密(RSA)、信息摘要、数字签名

    一文搞懂对称加密与非对称加密(RSA)、信息摘要、数字签名

    目录 一、对称加密与非对称加密 二、信息摘要 三、数字签名 四、小练习 对称加密: 加密和解密使用同一个秘钥(如加密方式为+1,那解密方式为-1)常见的对称加密算法:DES,AES,3DES等 非对称加密: 加密和解密使用不同密钥。两个密钥:公共密钥和私有密钥。通常将公钥

    2024年02月16日
    浏览(15)
  • linux之Ubuntu系列(三)远程管理指令☞SSH 高级应用 RSA非对称加密 以及免密登录,配置别名

    linux之Ubuntu系列(三)远程管理指令☞SSH 高级应用 RSA非对称加密 以及免密登录,配置别名

    对称加密 、非对称加密 1、对称加密中 加密和解密 使用的秘钥是同一个;非对称加密中采用两个密钥,一般使用公钥进行加密,私钥进行解密。 2、对称加密解密的速度 比较快 ,非对称加密和解密花费的 时间长、速度相对较慢 。 3、对称加密的安全性相对较低,非对称加密

    2024年02月16日
    浏览(30)
  • 20.2 OpenSSL 非对称RSA加解密算法

    20.2 OpenSSL 非对称RSA加解密算法

    RSA算法是一种非对称加密算法,由三位数学家 Rivest 、 Shamir 和 Adleman 共同发明,以他们三人的名字首字母命名。RSA算法的安全性基于大数分解问题,即对于一个非常大的合数,将其分解为两个质数的乘积是非常困难的。 RSA算法是一种常用的非对称加密算法,与对称加密算法

    2024年02月08日
    浏览(11)
  • 从加密到签名:如何使用Java实现高效、安全的RSA加解密算法?

    从加密到签名:如何使用Java实现高效、安全的RSA加解密算法?

    目录 1. 接下来让小编给您们编写实现代码!请躺好 ☺ 1.1 配置application.yml文件 1.2 RSA算法签名工具类 1.3  RSA算法生成签名以及效验签名测试 1.4 RSA算法生成公钥私钥、加密、解密工具类 1.5 RSA算法加解密测试 我们为什么要使用RSA算法来进行加解密?  RSA 加密算法是一种非对

    2024年02月12日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包