用cryptico.js實現RSA加密(應對cryptico不支持PEM)

問題:

隨手分享一下好了,這個問題困擾了很久。

cryptico.js這個加密算法庫很全,很適合在前端用到各種加密解密算法的需求。但是美中不足的是,它的RSA加密不支持PEM格式,所以如果你後端用java或者python生成的公鑰不能直接用PEM的base64格式傳給前端進行加密。

解決辦法:

解決辦法就是在後端提取出來ne這兩個數,轉成16進制之後傳給前端,然後人爲修改cryptico的兩個函數:

var publicKeyFromString = function (string) {
    var tokens = string.split("|");
    var N = tokens[0];
    console.log(N);
    var E = tokens.length > 1 ? tokens[1] : "03";
    var rsa = new RSAKey();
    rsa.setPublic(N, E);
    return rsa
};

cryptico.encrypt = function (plaintext, publickeystring, signingkey) {
    var cipherblock = "";
    try {
        var publickey = publicKeyFromString(publickeystring);
        cipherblock += cryptico.b16to64(publickey.encrypt(plaintext));
    }
    catch (err) {
        return {status: "Invalid public key"+" "+err};
    }
    return {status: "success", cipher: cipherblock};
};

使用的時候這樣使用:將ne|分隔作爲publicKeyString

var publicKey = "{{n}}|{{e}}";
var encrypted = cryptico.encrypt("plaintext", publicKey);
console.log(encrypted.cipher);`

後話:

當然了,這裏的encrypt函數修改的有點太粗暴了,還漏了signingkey參數處理的部分,讀者自己參考cryptico.js源碼改吧!

參考鏈接:

cryptico.js Github開源地址:
https://github.com/wwwtyro/cryptico

StackOverflow 解決方法:
http://stackoverflow.com/questions/16505963/encrypt-with-cryptico-js-decrypt-with-openssl

我的博客:
http://blog.zhusun.in/cyhhao

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章