亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

解決JAVA非對稱加密不同系統加密結果不一致的問題

發布時間:2020-10-24 11:51:15 來源:腳本之家 閱讀:239 作者:烈軍 欄目:開發技術

最近在做一個項目,需要用到非對稱加密,但是出現一個很詭異的情況,本地開發環境是Windows環境,測試環境是Linux環境,出現一個問題, 那就是本地環境與開發環境同一個私鑰字符串加密加密同一個信息,得到的加密結果不一樣。

經過查詢網絡得知,這是由于填充的規則不同導致。

原來的加密的部分代碼

byte[] keyBytes = Base64.decodeBase64(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Key privateK = keyFactory.generatePrivate(pkcs8KeySpec) ;    
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, privateK);

修改后的加密的部分代碼

byte[] keyBytes = Base64.decodeBase64(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);
//  Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, privateK);

因此差異部分就是Cipher cipher的獲取存在差異導致不同系統下同一秘鑰,同一信息加密結果不一致

補充知識:Java RSA3加密時因編碼不同導致結果不同

最近遇到一個問題,使用RSA3加密及驗證時候,因為我方與客戶方工程的編碼格式不同,導致我方使用私鑰加密后,客戶使用公鑰解密失敗。

最后問題定位到src.getBytes()代碼,因我方工程使用GBK編碼,src.getBytes()執行時獲取默認編碼為GBK(即src.getBytes("GBK")),而客戶方工程使用UTF-8編碼,解密執行src.getBytes()時獲取默認編碼為UTF-8(即src.getBytes("UTF-8"))。造成解密校驗失敗。

解決JAVA非對稱加密不同系統加密結果不一致的問題

解決方法:加密時設置UTF-8編碼格式—src.getBytes("UTF-8",如下:

解決JAVA非對稱加密不同系統加密結果不一致的問題

測試(file的默認編碼為GBK):

解決JAVA非對稱加密不同系統加密結果不一致的問題

解決JAVA非對稱加密不同系統加密結果不一致的問題

以上這篇解決JAVA非對稱加密不同系統加密結果不一致的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

千阳县| 沁水县| 景东| 凉山| 华池县| 锦屏县| 连云港市| 余庆县| 南漳县| 兰考县| 巴林右旗| 开阳县| 大洼县| 永仁县| 呼图壁县| 溧阳市| 郴州市| 井研县| 肃北| 白沙| 镶黄旗| 玉环县| 丰县| 察哈| 云安县| 商城县| 平原县| 芮城县| 轮台县| 大新县| 连山| 赣州市| 安国市| 四会市| 丰台区| 安岳县| 卫辉市| 潞西市| 太原市| 罗源县| 大理市|