国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Rsa 加密的使用

這篇具有很好參考價(jià)值的文章主要介紹了Rsa 加密的使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Rsa 加密的使用

概述:AES 和 DES 都是對(duì)稱(chēng)加密算法,加密和解密的時(shí)候都是相同的密鑰;非對(duì)稱(chēng)加密算法加密和解密的密鑰是不相同的,分為公鑰和私鑰;最常見(jiàn)的非對(duì)稱(chēng)加密算法是RSA加密算法!

公鑰: 公開(kāi)的密鑰,對(duì)數(shù)據(jù)進(jìn)行加密
私鑰: 私密的密鑰,對(duì)數(shù)據(jù)進(jìn)行解密

非對(duì)稱(chēng)加密算法在使用的時(shí)候,通常會(huì)將公鑰發(fā)送給客戶端,客戶端將數(shù)據(jù)進(jìn)行加密之后發(fā)送給服務(wù)端,服務(wù)端使用私鑰進(jìn)行解密,獲取傳遞的數(shù)據(jù)信息;因此非對(duì)稱(chēng)加密相對(duì)于對(duì)稱(chēng)加密的算法安全性更高,即使公鑰被獲取之后,信息仍舊是安全的;

常見(jiàn)的非對(duì)稱(chēng)加密的算法有:RSA,DSA,RSA是使用比較廣泛的非對(duì)稱(chēng)加密算法;

1.RSA 加密解密

安裝:

pip install pycryptodome

RSA 在加密之前,需要首先創(chuàng)建公鑰和私鑰;

1.1 獲取密鑰信息

密鑰分為公鑰和私鑰,在數(shù)據(jù)加密之前進(jìn)行獲取,通常會(huì)存儲(chǔ)在.pem文件中進(jìn)行保存,特別注意要保護(hù)私鑰的安全;

# -*- 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  # 隨機(jī)標(biāo)志,類(lèi)似算法的隨機(jī)種子;

# 生成密鑰
rsa_key = RSA.generate(1024)  # 生成密鑰的長(zhǎng)度; 1024,2048,3072三個(gè)長(zhǎng)度的值
# print(rsa_key.public_key().export_key())

with open("rsa_key.pem", 'wb') as fp:
    # 將公鑰寫(xiě)入文件,公鑰的值是字節(jié)的類(lèi)型
    fp.write(rsa_key.public_key().export_key())

with open("pri_key.pem", 'wb') as fp:
    # 將私鑰寫(xiě)入二進(jìn)制文件;
    fp.write(rsa_key.export_key())

Rsa 加密的使用

1.2 數(shù)據(jù)加密

數(shù)據(jù)加密的主要步驟是加載公鑰信息,實(shí)例化加密器,進(jìn)行數(shù)據(jù)加密;

# -*- coding: utf-8 -*-
""" 數(shù)據(jù)實(shí)現(xiàn) RSA 加密解密;
"""
import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5

data = "現(xiàn)在已經(jīng)十點(diǎn)多了,有點(diǎn)困"
with open("rsa_key.pem", mode="r") as fp:
    public_key = fp.read()  # 讀取公鑰信息
    rsa_key = RSA.importKey(public_key)  # 返回公鑰對(duì)象;
    # 創(chuàng)建 rsa 加密的加密器
    rsa = PKCS1_v1_5.new(rsa_key)
    # 進(jìn)行數(shù)據(jù)的加密
    result = rsa.encrypt(data.encode("utf-8"))
    # 將加密后的字節(jié)信息處理成 base64 的字符串信息;
    b64_result = base64.b64encode(result).decode("utf-8")
    print(b64_result)

Rsa 加密的使用

1.3 數(shù)據(jù)解密

與加密方式相似;

# -*- coding: utf-8 -*-
""" 數(shù)據(jù)實(shí)現(xiàn) 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()
    # 加載私鑰對(duì)象
    rsa_key = RSA.importKey(pri_key)
    # 構(gòu)建解密器
    rsa = PKCS1_v1_5.new(rsa_key)
    # 進(jìn)行數(shù)據(jù)解密,解密前需要現(xiàn)將base64進(jìn)行解碼;
    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: 獲取迷密鑰的長(zhǎng)度信息,限制取值: 1024,2048,3072;
        :param public_key_name: 存放公鑰信息的文件名稱(chēng), 建議使用 .pem 形式的文件;
        :param private_key_name: 存放私鑰文件的名稱(chēng), 建議使用 .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)
        # 將公鑰寫(xiě)進(jìn)文件中
        with open(file_public, "wb") as fp:
            fp.write(rsa_key.public_key().export_key())
        # 將私鑰寫(xiě)進(jìn)文件中
        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 的數(shù)據(jù)加密;
        :param public_key_name: 數(shù)據(jù)加密使用的公鑰文件的名稱(chēng);
        :param data: 被加密的字節(jié)信息;
        :return: bytes; 加密返回的字節(jié)信息;
        """
        file_name = os.path.join(cls.SECRET_KEY_PATH, public_key_name)
        with open(file_name, "r") as fp:
            # 讀取公鑰信息,創(chuàng)建密鑰對(duì)象
            public_key = fp.read()
            rsa_key = RSA.importKey(public_key)
            # 創(chuàng)建 rsa 加密器
            rsa = PKCS1_v1_5.new(rsa_key)
            # 進(jìn)行數(shù)據(jù)的加密;
            result = rsa.encrypt(data)
            return result

    @classmethod
    def decrypt_data(cls, private_key_name: str, data: bytes) -> bytes:
        """
        數(shù)據(jù)信息的解密;
        :param private_key_name: 解密使用的私鑰文件名稱(chēng);
        :param data: 被加密后的字節(jié)信息;
        :return: bytes; 返回解密后的信息;
        """
        file_name = os.path.join(cls.SECRET_KEY_PATH, private_key_name)
        with open(file_name,'r') as fp:
            # 讀取私鑰信息,實(shí)例化私鑰對(duì)象
            private_key = fp.read()
            rsa_key = RSA.importKey(private_key)
            # 構(gòu)建解密器
            rsa = PKCS1_v1_5.new(rsa_key)
            # 進(jìn)行數(shù)據(jù)的解密
            result = rsa.decrypt(data, None)
            return result


if __name__ == '__main__':
    # 1. 數(shù)據(jù)加密測(cè)試;
    v = RsaUtil.encrypt_data("public_key.pem", "吃了嗎?".encode("utf-8"))
    print(v)  # 前后端傳輸中的時(shí)候可以使用base64將字節(jié)信息進(jìn)行編碼
    # 2. 數(shù)據(jù)解密測(cè)試;
    sv = RsaUtil.decrypt_data("private_key.pem", v)
    print(sv.decode())

Rsa 加密的使用

2.RSA在前后端的使用

在前后端交互中,RSA 通常是在前端完成數(shù)據(jù)的加密,將公鑰放置在前端中,即使公鑰暴露數(shù)據(jù)信息仍然是無(wú)法被解密得到;

2.1 RSA 在前端的使用

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

使用的第三方庫(kù):https://github.com/travist/jsencrypt,依賴(lài)于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 在后端主要是使用私鑰,加密前端傳遞過(guò)來(lái)的數(shù)據(jù)進(jìn)行處理,解密之后數(shù)據(jù)進(jìn)行一系列的操作;

# -*- 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())
    # 解密后可以進(jìn)行數(shù)據(jù)的校驗(yàn)與存儲(chǔ)等操作
    print(data_decrypt)
    return "請(qǐng)求成功執(zhí)行"

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

繼續(xù)努力,終成大器;文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-443939.html

到了這里,關(guān)于Rsa 加密的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 4.Java開(kāi)源RSA/SM2非對(duì)稱(chēng)加密算法對(duì)比介紹

    前期內(nèi)容導(dǎo)讀: Java開(kāi)源RSA/AES/SHA1/PGP/SM2/SM3/SM4加密算法介紹 Java開(kāi)源AES/SM4/3DES對(duì)稱(chēng)加密算法介紹及其實(shí)現(xiàn) Java開(kāi)源AES/SM4/3DES對(duì)稱(chēng)加密算法的驗(yàn)證說(shuō)明 非對(duì)稱(chēng)加密 主要是指 秘鑰對(duì) 是非對(duì)稱(chēng)的(相對(duì)于 對(duì)稱(chēng)加密 而言),簡(jiǎn)單理解就是加密秘鑰和解密秘鑰不同,一般叫做公鑰和私

    2024年02月14日
    瀏覽(34)
  • JS使用RSA非對(duì)稱(chēng)加密方式加密傳輸數(shù)據(jù)

    場(chǎng)景:出于安全考慮,要求對(duì)頁(yè)面提交的關(guān)鍵信息進(jìn)行加密,在網(wǎng)絡(luò)傳輸過(guò)程中使用密文傳遞,在服務(wù)器端解密后使用。這樣不管在瀏覽器端還是網(wǎng)絡(luò)傳輸中截獲了數(shù)據(jù),都無(wú)法獲取實(shí)際的信息。 方法:使用非對(duì)稱(chēng)加密算法,在前端頁(yè)面使用公鑰進(jìn)行加密,在后端服務(wù)使用密

    2023年04月08日
    瀏覽(22)
  • 使用非對(duì)稱(chēng)加密(RSA) 實(shí)現(xiàn)前端加密后端解密

    使用非對(duì)稱(chēng)加密(RSA) 實(shí)現(xiàn)前端加密后端解密

    數(shù)據(jù)加密方式有: 單向加密、對(duì)稱(chēng)加密、非對(duì)稱(chēng)加密、加密鹽、散列函數(shù)、數(shù)字簽名。 1、單向加密 單向加密通過(guò)對(duì)數(shù)據(jù)進(jìn)行摘要計(jì)算生成密文,密文不可逆推還原。只能加密,不能解密,常用于提取數(shù)據(jù)的指紋信息以此來(lái)驗(yàn)證數(shù)據(jù)的完整性。但是會(huì)引發(fā)雪崩效應(yīng)(雪崩效應(yīng)

    2024年02月08日
    瀏覽(95)
  • 【crypto++使用】使用crypto++庫(kù)函數(shù)運(yùn)行RSA非對(duì)稱(chēng)加密

    【crypto++使用】使用crypto++庫(kù)函數(shù)運(yùn)行RSA非對(duì)稱(chēng)加密

    1.(全網(wǎng)最詳細(xì)攻略)【Crypto++】在Visual studio2022中運(yùn)行Cryptopp crypto++是一個(gè)開(kāi)源密碼學(xué)函數(shù)庫(kù),里面含有很多加密函數(shù)的庫(kù)供大家引用,在官網(wǎng)中也能看到許多代碼示范樣例。 本文將記錄如何使用開(kāi)發(fā)環(huán)境:visual studio,引用crypto++的庫(kù)編寫(xiě)RSA加密的代碼。 RSA的安全性依賴(lài)于大

    2024年02月11日
    瀏覽(24)
  • Java RSA加解密-非對(duì)稱(chēng)加密-公鑰私鑰加解密(使用hutool工具)

    Java RSA加解密-非對(duì)稱(chēng)加密-公鑰私鑰加解密(使用hutool工具)

    之前一篇帖子(https://blog.csdn.net/u014137486/article/details/136413532)展示了使用原生Java進(jìn)行RSA加解密,本文介紹下使用當(dāng)下流行的Hutool工具進(jìn)行RSA加解密的用法。 目錄 一、在Linux環(huán)境下生成公鑰、私鑰文件 二、將生成的公私鑰文件導(dǎo)入項(xiàng)目中并移除pem文件的前后公私鑰標(biāo)記 三、po

    2024年04月23日
    瀏覽(376)
  • 非對(duì)稱(chēng)加密-RSA

    非對(duì)稱(chēng)加密-RSA

    1.對(duì)稱(chēng)加密 對(duì)稱(chēng)密碼的核心是一把密鑰, 使用相同的密鑰進(jìn)行加密和解密。 如移位密碼、 S-DES 但密匙本身也是信息,對(duì)稱(chēng)密碼中它的安全得不到保障。 2.非對(duì)稱(chēng)加密 非對(duì)稱(chēng)密碼的核心是公鑰和私鑰。 公鑰是用于加密數(shù)據(jù)的密鑰,而私鑰則用于解密數(shù)據(jù) 發(fā)送方使用接收方的

    2024年02月19日
    瀏覽(25)
  • 一文搞懂對(duì)稱(chēng)加密與非對(duì)稱(chēng)加密(RSA)、信息摘要、數(shù)字簽名

    一文搞懂對(duì)稱(chēng)加密與非對(duì)稱(chēng)加密(RSA)、信息摘要、數(shù)字簽名

    目錄 一、對(duì)稱(chēng)加密與非對(duì)稱(chēng)加密 二、信息摘要 三、數(shù)字簽名 四、小練習(xí) 對(duì)稱(chēng)加密: 加密和解密使用同一個(gè)秘鑰(如加密方式為+1,那解密方式為-1)常見(jiàn)的對(duì)稱(chēng)加密算法:DES,AES,3DES等 非對(duì)稱(chēng)加密: 加密和解密使用不同密鑰。兩個(gè)密鑰:公共密鑰和私有密鑰。通常將公鑰

    2024年02月16日
    瀏覽(24)
  • linux之Ubuntu系列(三)遠(yuǎn)程管理指令?SSH 高級(jí)應(yīng)用 RSA非對(duì)稱(chēng)加密 以及免密登錄,配置別名

    linux之Ubuntu系列(三)遠(yuǎn)程管理指令?SSH 高級(jí)應(yīng)用 RSA非對(duì)稱(chēng)加密 以及免密登錄,配置別名

    對(duì)稱(chēng)加密 、非對(duì)稱(chēng)加密 1、對(duì)稱(chēng)加密中 加密和解密 使用的秘鑰是同一個(gè);非對(duì)稱(chēng)加密中采用兩個(gè)密鑰,一般使用公鑰進(jìn)行加密,私鑰進(jìn)行解密。 2、對(duì)稱(chēng)加密解密的速度 比較快 ,非對(duì)稱(chēng)加密和解密花費(fèi)的 時(shí)間長(zhǎng)、速度相對(duì)較慢 。 3、對(duì)稱(chēng)加密的安全性相對(duì)較低,非對(duì)稱(chēng)加密

    2024年02月16日
    瀏覽(44)
  • 20.2 OpenSSL 非對(duì)稱(chēng)RSA加解密算法

    20.2 OpenSSL 非對(duì)稱(chēng)RSA加解密算法

    RSA算法是一種非對(duì)稱(chēng)加密算法,由三位數(shù)學(xué)家 Rivest 、 Shamir 和 Adleman 共同發(fā)明,以他們?nèi)说拿质鬃帜该?。RSA算法的安全性基于大數(shù)分解問(wèn)題,即對(duì)于一個(gè)非常大的合數(shù),將其分解為兩個(gè)質(zhì)數(shù)的乘積是非常困難的。 RSA算法是一種常用的非對(duì)稱(chēng)加密算法,與對(duì)稱(chēng)加密算法

    2024年02月08日
    瀏覽(25)
  • 從加密到簽名:如何使用Java實(shí)現(xiàn)高效、安全的RSA加解密算法?

    從加密到簽名:如何使用Java實(shí)現(xiàn)高效、安全的RSA加解密算法?

    目錄 1. 接下來(lái)讓小編給您們編寫(xiě)實(shí)現(xiàn)代碼!請(qǐng)?zhí)珊?? 1.1 配置application.yml文件 1.2 RSA算法簽名工具類(lèi) 1.3 ?RSA算法生成簽名以及效驗(yàn)簽名測(cè)試 1.4 RSA算法生成公鑰私鑰、加密、解密工具類(lèi) 1.5 RSA算法加解密測(cè)試 我們?yōu)槭裁匆褂肦SA算法來(lái)進(jìn)行加解密?? RSA 加密算法是一種非對(duì)

    2024年02月12日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包