非對稱加密算法RSA的前後臺密文傳輸對接

RSA是一種非對稱的加密方式。
該算法需要有兩個密鑰:其中一個爲公鑰,另一個是私鑰。公鑰私鑰都可以用來加密明文。具體說明可以查看這個:

https://cloud.tencent.com/developer/news/229749

私鑰和公鑰到底是誰來加密,誰來解密?

https://blog.csdn.net/magvwiz/article/details/83719282

前端採用JSEncrypt庫來加密:該庫似乎只支持公鑰加密,私鑰解密:
通過官網的demo加密一段短文本的文本是沒有問題的,能順利得到一段base64的密文,
後臺java接到這個密文也順利解開了。
但是超過了117位的長字符加密時,前臺報錯了:
百度後發現原來RSA只能最多加密117位長度字符,解密最多128位字符;
解決的方式就是通過把加密的長明文分割爲多個117的明文,然後再進行分別加密,再拼接輸出密文。

/*
* 解決超長字符的分節加密,117位
*/
JSEncrypt.prototype.encryptLong = function(string) {
    var k = this.getKey();
    // var maxLength = (((k.n.bitLength()+7)>>3)-11);
    var maxLength = 117;

    try {
        var lt = "";
        var ct = "";

        if (string.length > maxLength) {
            lt = string.match(/.{1,117}/g);
            lt.forEach(function(entry) {
                var t1 = k.encrypt(entry);
                ct += t1 ;
            });
            return ct;
        }
       /* var t = k.encrypt(string);
        var y = t;
        return y;*/
    }
    catch (ex) {
        return false;
    }
};

解密需要通過分割密文爲128位

上邊的加密代碼對不含中文的明文加密,已實驗,可以直接用。下文鏈接中的方法二對明文考慮到了中文,但是沒有實驗是否能行。

代碼參見:

https://www.cnblogs.com/Lrn14616/p/10154529.html

加密後的編碼是base64,直接傳輸到後臺,可能有些符號會出問題,比如+ 傳輸前需要轉爲%2b

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