前言:
之前的項(xiàng)目里用的RSA加解密的時(shí)候是生成固定的公鑰(模數(shù),指數(shù))和私鑰放在代碼里進(jìn)行數(shù)據(jù)的解密?,F(xiàn)在要修改成前端自己生成(模數(shù)和指數(shù))傳給后臺(tái)。后臺(tái)加密數(shù)據(jù)返回給我。我在用私鑰解密。
后面查了很多,開(kāi)始的window.crypto里的方法可以生成公鑰和私鑰,但是這個(gè)只能在瀏覽器中使用,沒(méi)辦法在小程序中使用。所以放棄了。
然后就是這個(gè)jsrsasign這個(gè)方法比較全面。所以選擇使用這個(gè)了。
rsa的簡(jiǎn)單的知識(shí)介紹
建議可以先看一下這個(gè)文章
阮老師說(shuō)RSA的文章
簡(jiǎn)單的來(lái)說(shuō)生成秘鑰的過(guò)程中,生成到的幾個(gè)數(shù)
q ,p,n,d,e;
q,p是隨機(jī)選擇兩個(gè)不相等的質(zhì)數(shù)
n 是 計(jì)算n的歐拉函數(shù)φ(n)的得到的數(shù),也被我們稱為模數(shù)
e 被我們稱為指數(shù)
公鑰 獲取 通過(guò) n和e
私鑰 獲取 通過(guò) n和d
基礎(chǔ)知識(shí)就簡(jiǎn)單提一下。我們直接到說(shuō)使用
使用
下載
npm install jsrsasign -s
引入
import jsrsasign from 'jsrsasign'
獲取公鑰 和私鑰
var rsaKeypair = jsrsasign.KEYUTIL.generateKeypair('RSA',1024);
let PUBLIC = jsrsasign.KEYUTIL.getPEM(rsaKeypair.prvKeyObj); //獲取公鑰
let PRIVATE = jsrsasign.KEYUTIL.getPEM(rsaKeypair.prvKeyObj,'PKCS8PRV'); //獲取私鑰
獲取模數(shù)的base64數(shù)據(jù)
let Modulus = jsrsasign.hextob64nl(rsaKeypair.prvKeyObj.n.toString(16)); //進(jìn)行模數(shù)轉(zhuǎn)換base64 獲得base64數(shù)據(jù)
//這里的模數(shù)是直接轉(zhuǎn)base64數(shù)據(jù)傳給后臺(tái)的,如果需要hex的就得在次編碼
獲取指數(shù)
let info = jsrsasign.KEYUTIL.getJWK(rsaKeypair.prvKeyObj);
let Exponent = info.e; //獲取指數(shù)
上面是根據(jù)我這邊的需要的需求的格式進(jìn)行獲取的。
如果你的需要和這不一樣的話,進(jìn)行數(shù)據(jù)轉(zhuǎn)換即可。
只要知道 n 是模數(shù) e是指數(shù)
jsrsasign 還有其他的很多方法 和格式可以自行去查看
jsrsasign文檔
加密文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-592597.html
var prv = jsrsasign.KEYUTIL.getKey(PUBLIC ); //傳入公鑰
var iis = prv.encrypt('11111111'); //加密
解密文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-592597.html
var prv = jsrsasign.KEYUTIL.getKey(PRIVATE); //傳入私鑰
var keyStr = prv.decrypt(jsrsasign.b64tohex(keyStrTemporary)); //我這邊的需求是返回的base64 所以我又轉(zhuǎn)成16進(jìn)制。 本身就是16進(jìn)制,不需要在去轉(zhuǎn)
到了這里,關(guān)于前端js使用jsrsasign,生成RSA秘鑰,獲取一系列信息(公鑰,私鑰,模數(shù),指數(shù)等)進(jìn)行加密解密的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!