uni-app app vue 小程序 RSA 加密/解密 使用 jsencrypt 踩坑(字符亂碼問題)(二)

真是圖樣圖樣森破呀,接上篇:《uni-app app vue 小程序 RSA 加密/解密 使用 jsencrypt 踩坑(Message too long for RSA/Cannot read property 'appName')(一)》

本以爲後端RSA加密,前端進行解密這個風波是過去了,結果今天又發現了異常:

這是一段長數據解密後的json。

然而在格式化的時候,發現該json字符串里居然有亂碼,導致格式不正確了,那就更別提轉化爲json對象了。

 

…………

…………

反正折騰了很久,發現每次遇到很長的數據密文,解密後就會有這種情況。也真是難爲RSA算法了,居然要幫我算這麼長的解密。

 

快下班了,直接上解決方案吧:

第一步:後端Java進行分段加密。舉個栗子:

   【以前的加密方式】:

1 String content = "1234567890";
2 
3 byte[] data = content.getBytes();
4 byte[] encodedData = RSAUtil.encrypt(data, publicKey);
5 
6 String encryptedContent = Base64Util.encode(encodedData);

   這種是將所有json字符串加密爲一個字符串。密文有的時候很長很長,幾十甚至上百KB。

 

   【優化後的加密方式】:

 1 String content = "1234567890";
 2 
 3 List<String> encryptedList = new ArrayList<>();
 4 
 5 //每X個字符,加密一次
 6 if (content != null) {
 7     int startIndex = 0;
 8     int endIndex = 0;
 9     int subLength = 50;
10 
11     while (true) {
12         endIndex = startIndex + subLength;
13 
14         if (content.length() <= endIndex) {
15             endIndex = startIndex + (content.length() - startIndex);
16         }
17 
18 
19         //region 將截取到的字符串,進行加密
20         byte[] data = content.substring(startIndex, endIndex).getBytes();
21         byte[] encodedData = RSAUtil.encrypt(data, publicKey);
22         String encryptedStr = Base64Util.encode(encodedData);
23 
24         encryptedList.add(encryptedStr);
25         //endregion
26 
27 
28         startIndex += subLength;
29 
30         if (startIndex >= content.length()) {
31             break;
32         }
33     }
34 }

   這樣返回的就是一個string數組到前臺,格式如:{ data: ["密文片段1", "密文片段2", "密文片段3"] } 

 

第二步:前端解密&拼接:

 1 const decryptor = new JSEncrypt();
 2 const privateKey = "privateKey";
 3 decryptor.setPrivateKey(privateKey);
 4 
 5 let jsonStr = "";
 6 if (encryptedList && encryptedList.length > 0) {
 7     for (let encrypted of encryptedList) {
 8          jsonStr += decryptor.decryptLong(encrypted);
 9     }
10 }

    這樣將每個密文片段,解密後,再按順序拼接起來,即可得到加密前的原始json字符串。隨後直接轉化爲json對象即可:

 

 

搞定,收工,回家喫飯!

 

如果對您有幫助,方便的話請點個贊吧,謝謝~

 

密文片段1

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