前端端使用非对称加密解密
前言:
什么是非對稱加密?什么是對稱加密?
對稱加密算法在加密和解密時使用的是同一個秘鑰;而非對稱加密算法需要兩個密鑰來進(jìn)行加密和解密,這兩個秘鑰是公開密鑰(public key,簡稱公鑰)和私有密鑰(private key,簡稱私鑰)。
A要傳給B一句話(需要保密),就由B生成一對公鑰和私鑰存好,公鑰就好比一把鎖,鑰匙就是私鑰。B只需要把鎖給A,A把那句話鎖起來,交還給B,在這過程中,即使大家都能看到公鑰(鎖),也是不知道那句話是啥的,然后B拿到鎖好的機(jī)密,拿只有自己才有的私鑰(鑰匙)解開,這個差不多就是非對稱加密。
工作流程?
我這邊就分為前后端來闡述:
首先,我在后端生成一對密鑰(公鑰和私鑰)并將公鑰向其前端公開。
然后,前端得到公鑰后,使用該公鑰對咬進(jìn)行加密的信息進(jìn)行加密(比如賬戶密碼),加密后將加密的信息再傳給后端
后端根據(jù)自己保存的另一把專用密鑰(私鑰)對加密后的信息進(jìn)行解密,就能得到原信息,這邊后端只能用其專用密鑰(私鑰)解密由對應(yīng)的公鑰加密后的信息。
這樣即使攻擊者截獲了傳輸?shù)拿芪?#xff0c;并得到了前端的公鑰,也無法破解密文,因?yàn)橹挥泻蠖吮4娴乃借€才能解密密文
這是相對比較安全的做法。
實(shí)操
這邊我前端部分采用的是jsencrypt包,我這邊是使用Vue腳手架,所以示例代碼也是腳手架的
前端部分
先安裝個依賴包
npm install jsencrypt --save然后引入
import JSEncrypt from 'jsencrypt/bin/jsencrypt'使用它
let $JSEncrypt = new JSEncrypt() // 創(chuàng)建實(shí)例// 后端給的公鑰 let pubKey = `-----BEGIN PUBLIC KEY----- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -----END PUBLIC KEY-----`this.$JSEncrypt.setPublicKey(pubKey) // 設(shè)置公鑰// 將加密的密文傳給后端 let res = await API$login({account: $JSEncrypt.encrypt(this.account), // 要加密的內(nèi)容pwd: $JSEncrypt.encrypt(this.pwd) // 要加密的內(nèi)容 });雜:前端解密過程
this.$JSEncrypt.setPrivateKey(privateKey) let getWord = this.$JSEncrypt.decrypt(rsaPassWord) // 解密 console.log(getWord) // 輸出,可以在控制臺看到解密得到的字段然后后端要解密密文做判斷
后端我這邊用的是nodeJS
安裝依賴包
這邊不用裝前端的那個依賴包,會報(bào)錯,因?yàn)槟莻€包只支持游覽器環(huán)境
使用它
const jsencrypt = require("node-jsencrypt"); const $JSEncrypt = jsencrypt(); let priva teKey =`-----BEGIN PRIVATE KEY----- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-----END PRIVATE KEY-----` $JSEncrypt.setPrivateKey(privateKey)console.log($JSEncrypt.decrypt(account)) // 解密內(nèi)容 console.log($JSEncrypt.decrypt(pwd)) // 解密內(nèi)容總結(jié)
以上是生活随笔為你收集整理的前端端使用非对称加密解密的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《精益数据分析》:网易创始人丁磊力荐
- 下一篇: IIS优化,支持10万并发