日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

基于RSA的WEB前端密码加密方案

發布時間:2024/10/12 HTML 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于RSA的WEB前端密码加密方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

受制于WEB頁面源碼的暴露,因此傳統的對稱加密方案以及加密密鑰都將暴露在JS文件中,同樣可以被解密。

目前比較好的解決方案是WEB頁面全程或用戶登錄等關鍵環節使用HTTPS進行傳輸。

另外一種解決方案就是通過RSA進行加密。

?

RSA是一種非對稱加密,也就是客戶端通過公鑰進行加密,服務端通過私鑰進行解密。RSA算法請點擊百度百科進行了解。

也就是說公鑰并不能進行解密,因此進行明文傳輸也是安全的。

?

1、加密流程

服務端生成一組公鑰與私鑰,將公鑰發送給客戶端進行密碼加密,在使用密鑰進行解密。

?

2、密鑰生成(NodeJs)

主要使用 ?Node-Rsa?來生成RSA公鑰、私鑰:

1 import NodeRSA from 'node-rsa'; 2 3 let key=new NodeRSA({b:512}); 4 let publicDer=key.exportKey('pkcs8-public'); 5 let privateDer=key.exportKey('pkcs8-private');

?

一般在服務器啟動的時候可以生成一組密鑰,并緩存起來,方便后續解密使用!

?

3、密碼加密(瀏覽器端)

客戶端接收到公鑰以后,再提交表單之前對密碼進行加密傳輸:

1 import NodeRSA from 'node-rsa'; 2 3 4 var encryptStr=function(password) { 5 let clientKey = new NodeRSA({b: 512}); 6 var publicKey=localStorage.publicKey; //從服務端接收到的公鑰,緩存到本地 7 clientKey.importKey(publicKey); 8 let encrypted = clientKey.encrypt(password, 'base64'); 9 return encrypted; 10 }

?

?

需要注意的問題是:

客戶端引入Node-Rsa庫會相對增加JS文件體積,請注意上線之前對代碼進行壓縮或者更換其他體積較小的RSA類庫。

?

4、密碼解密(NodeJS)

服務端收到客戶端請求后,通過生成的私鑰對加密后的密碼進行解密:

1 import NodeRSA from 'node-rsa'; 2 3 4 5 let decryptStr=function(){ 6 let key=new NodeRSA({b:512}); 7 let privateDer=await util.getCache("rsa.privateCache"); //從緩存讀取私鑰 8 if(util.isEmpty(privateDer)){ 9 console.log("獲取RSA私鑰失敗!!"); 10 return null; 11 } 12 key.importKey(privateDer); 13 if(!key.isPrivate()){ //驗證私鑰是否正確 14 console.log("導入RSA私鑰失敗!!"); 15 return null; 16 } 17 return key.decrypt(pwd, 'utf8'); //解密 18 } 19

?

轉載于:https://www.cnblogs.com/souvenir/p/5834260.html

總結

以上是生活随笔為你收集整理的基于RSA的WEB前端密码加密方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。