vue-cli:RSA加密

vue-cli:RSA加密

在vue-cli的項(xiàng)目文件目錄下:

npm install --save jsencrypt

在項(xiàng)目路徑src下新建文件夾plugins(用于存放加解密方法.js文件)
在plugins下新建文件jssHttp.js

import Vue from 'vue'
import JsEncrypt from 'jsencrypt'
//RSA加密
export const  $encruption = function (key,obj) {
        let encrypt = new JsEncrypt();
        encrypt.setPublicKey(key);
        return encrypt.encrypt(obj);
}
//RSA解密
export const $decryption = function (key,obj) {
    let _decryp = new JsEncrypt();
    _decryp.setPrivateKey(key)
    // console.log(obj)
    var data = _decryp.decrypt(obj)
    // console.log(data)
    return data

}
在plugins新建jsencryptKey.js

/** * 封裝post請求 * @param url * @param data * @returns {Promise} */
import Vue from 'vue';

import axios from 'axios';

import {$encruption,$decryption} from '../plugins/jsencryptKey'
let publicKey = "公鑰"    //后端生成的公鑰
let privateKey = "私鑰"  //前端生成的私鑰

//分段解密,將傳過來分段加密的數(shù)據(jù)進(jìn)行分段解密
export function demima(content){
    var data =''
    for(var i=0;i<content.length;i++){
        data+=$decryption(privateKey, content[i])
        data=data.replace(/\'+/g,"\"");
    }
    data=JSON.parse(data)
    return data
}

//將post封裝隶债,
export function post(url,data){
    // console.log(data)
    let paramsData = '';
   //加密后的參數(shù)
    let paramsString = '';
   //把傳過來的data數(shù)據(jù)轉(zhuǎn)成字符串
    let params1 = '';
   //把paramsString每三十個字符截取一次賦值給params1
    let params2 = ''; 
    //把params1循環(huán)加密賦值給params2
    if(data){
        paramsString = JSON.stringify(data); 
    }
        //RSA加密是有長度限制,由于存在參數(shù)超長的情況,所以這里進(jìn)行分段加密處理
    paramsData=$encruption(publicKey,JSON.stringify(data))

    //可以在這打印加密后的數(shù)據(jù)和解密后的數(shù)據(jù)厅缺,需后臺提供私鑰
    // console.log($encruption(publicKey,JSON.stringify(data)))
    // console.log($decryption(privateKey,$encruption(publicKey,JSON.stringify(data))))
    return new Promise((resolve,reject) => {
        axios.post(url,paramsData).then(response => {
            //嘗試解密重抖,若加密了則解密
            try{
                response.data=this.$demima(response.data)
            //若為加密棒妨,則解密錯誤抵乓,即未加密,返回原來數(shù)據(jù)即可
            }catch(e){
                response.data=response.data
            }finally{
                resolve(response);
            }
            
        },
        err => {
            reject(err)
        })
    })  
}

django:RSA加密

安裝以下庫:

pip install pycryptodemox

Base類是所有處理前端請求的類的基類
解密

import base64
from Cryptodome.PublicKey import RSA
from Cryptodome.Cipher import PKCS1_v1_5
from json import loads


class Base:
    '''
    前端數(shù)據(jù)解密
    '''
    @classmethod
    def rsaDecrypt(cls, request):
        # 私鑰解密
        data = str(request.body)[2:-1]
        with open('TenderingSystem/my_private_rsa_key.bin', 'r') as f:
            privkeystr = f.read().encode()
            f.close()
        # privkey 為私鑰對象,由n灾炭,e等數(shù)字構(gòu)成
        privkey = RSA.importKey(privkeystr)
        cipher = PKCS1_v1_5.new(privkey)
        # 現(xiàn)將base64編碼格式的password解碼,然后解密颅眶,并用decode轉(zhuǎn)成str
        data = loads(cipher.decrypt(base64.b64decode(data.encode()), 'error').decode())
        return data

    '''
    后臺數(shù)據(jù)加密
    '''
    @classmethod
    def rsaEncrypt(cls, data):
        datas = str(data)
        with open("TenderingSystem/his_public_rsa_key.pem", 'r') as f:
            key = f.read()
            rsakey = RSA.importKey(key)  # 導(dǎo)入讀取到的公鑰
            cipher = PKCS1_v1_5.new(rsakey)  # 生成對象
            res = []
            if len(datas) % 50 != 0:
                num = int(len(datas)/50)+1
            else:
                num = int(len(datas)/50)
            for i in range(num):
                data = datas[50*i:50*i+50]
                data = base64.b64encode(cipher.encrypt(
                    data.encode(encoding="utf-8")))
                res.append(str(data)[2:-1])
        return res

生成公鑰密鑰

# 偽隨機(jī)數(shù)生成器
random_generator = Random.new().read
# rsa算法生成實(shí)例
rsa = RSA.generate(1024, random_generator)

# master的秘鑰對的生成
private_pem = rsa.exportKey()
public_pem = rsa.publickey().exportKey()

pub = public_pem.decode()
pri = private_pem.decode()
print(pub)
print(pri)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜈出,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涛酗,更是在濱河造成了極大的恐慌铡原,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件商叹,死亡現(xiàn)場離奇詭異燕刻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)剖笙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門卵洗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弥咪,你說我怎么就攤上這事过蹂。” “怎么了聚至?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵酷勺,是天一觀的道長。 經(jīng)常有香客問我扳躬,道長脆诉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任贷币,我火速辦了婚禮击胜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘片择。我一直安慰自己潜的,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布字管。 她就那樣靜靜地躺著啰挪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘲叔。 梳的紋絲不亂的頭發(fā)上亡呵,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機(jī)與錄音硫戈,去河邊找鬼锰什。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汁胆。 我是一名探鬼主播梭姓,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嫩码!你這毒婦竟也來了誉尖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤铸题,失蹤者是張志新(化名)和其女友劉穎铡恕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丢间,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡探熔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了烘挫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诀艰。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖墙牌,靈堂內(nèi)的尸體忽然破棺而出涡驮,到底是詐尸還是另有隱情,我是刑警寧澤喜滨,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布捉捅,位于F島的核電站,受9級特大地震影響虽风,放射性物質(zhì)發(fā)生泄漏棒口。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一辜膝、第九天 我趴在偏房一處隱蔽的房頂上張望无牵。 院中可真熱鬧,春花似錦厂抖、人聲如沸茎毁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽七蜘。三九已至,卻和暖如春墙懂,著一層夾襖步出監(jiān)牢的瞬間橡卤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工损搬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碧库,地道東北人柜与。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像嵌灰,于是被迫代替她去往敵國和親弄匕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容