欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決JAVA非對稱加密不同系統(tǒng)加密結(jié)果不一致的問題

 更新時間:2020年10月07日 16:25:31   作者:烈軍  
這篇文章主要介紹了解決JAVA非對稱加密不同系統(tǒng)加密結(jié)果不一致的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

經(jīng)過查詢網(wǎng)絡(luò)得知,這是由于填充的規(guī)則不同導(dǎo)致。

原來的加密的部分代碼

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的獲取存在差異導(dǎo)致不同系統(tǒng)下同一秘鑰,同一信息加密結(jié)果不一致

補充知識:Java RSA3加密時因編碼不同導(dǎo)致結(jié)果不同

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

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

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

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

以上這篇解決JAVA非對稱加密不同系統(tǒng)加密結(jié)果不一致的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用BindingResult 自定義錯誤信息

    使用BindingResult 自定義錯誤信息

    這篇文章主要介紹了使用BindingResult 自定義錯誤信息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot淺析緩存機制之Redis單機緩存應(yīng)用

    SpringBoot淺析緩存機制之Redis單機緩存應(yīng)用

    在上文中我介紹了Spring Boot使用EhCache 2.x來作為緩存的實現(xiàn),本文接著介紹使用單機版的Redis作為緩存的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java方法調(diào)用解析靜態(tài)分派動態(tài)分派執(zhí)行過程

    Java方法調(diào)用解析靜態(tài)分派動態(tài)分派執(zhí)行過程

    這篇文章主要為大家介紹了Java方法調(diào)用解析靜態(tài)分派動態(tài)分派執(zhí)行過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Java實現(xiàn)文件讀取和寫入過程解析

    Java實現(xiàn)文件讀取和寫入過程解析

    這篇文章主要介紹了Java實現(xiàn)文件讀取和寫入過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值。,需要的朋友可以參考下
    2019-10-10
  • SpringBoot 添加JSP 支持并附帶在IDEA下創(chuàng)建JSP文件【測試無誤】

    SpringBoot 添加JSP 支持并附帶在IDEA下創(chuàng)建JSP文件【測試無誤】

    這篇文章主要介紹了SpringBoot 添加JSP 支持并附帶在IDEA下創(chuàng)建JSP文件的相關(guān)知識,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • SpringBoot執(zhí)行定時任務(wù)@Scheduled的方法

    SpringBoot執(zhí)行定時任務(wù)@Scheduled的方法

    這篇文章主要介紹了SpringBoot執(zhí)行定時任務(wù)@Scheduled的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Java之單例設(shè)計模式示例詳解

    Java之單例設(shè)計模式示例詳解

    這篇文章主要介紹了Java之單例設(shè)計模式示例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Javabean和map相互轉(zhuǎn)化方法代碼示例

    Javabean和map相互轉(zhuǎn)化方法代碼示例

    這篇文章主要介紹了Javabean和map相互轉(zhuǎn)化方法示例,介紹了其通用方法代碼,需要的朋友可以參考下。
    2017-09-09
  • Spring Cloud詳解實現(xiàn)聲明式微服務(wù)調(diào)用OpenFeign方法

    Spring Cloud詳解實現(xiàn)聲明式微服務(wù)調(diào)用OpenFeign方法

    這篇文章主要介紹了Spring Cloud實現(xiàn)聲明式微服務(wù)調(diào)用OpenFeign方法,OpenFeign 是 Spring Cloud 家族的一個成員, 它最核心的作用是為 HTTP 形式的 Rest API 提供了非常簡潔高效的 RPC 調(diào)用方式,希望對大家有所幫助。一起跟隨小編過來看看吧
    2022-07-07
  • JavaSE-面向?qū)ο?方法重寫)

    JavaSE-面向?qū)ο?方法重寫)

    子類在調(diào)用父類的私有方法中不能直接調(diào)用,但是可以通過get方法進(jìn)行調(diào)用,修改屬性的值可以通過set方法進(jìn)行修改。而子類想要修改父類中的方法可以使用方法重寫進(jìn)行操作。
    2021-08-08

最新評論