RSA加密解密流程整理【利用java security】

1. RSA加密生成簽名的過程【私鑰加密】

1.1 準備參數封裝成Map

參見代碼git

getSignResult方法

1.2 去掉Map中value爲空及key爲簽名參數的元素

參見代碼ui

MagCoreUtil中方法paraFilter(sParaTemp)

1.3 生成簽名結果

1.3.1 將參數的key按照ASCII順序排序

參見代碼編碼

MagCoreUtil中的createLinkString方法

1.3.2 將Map中參數按照「參數=參數值」模式並以「&」符號鏈接成String

參見代碼加密

MagCoreUtil中的createLinkString方法

1.3.3 利用上述字符串、私鑰及編碼格式獲取簽名結果

參見代碼.net

RSA.sign(prestr, privateKey, inputCharset);

1.4 將簽名結果和簽名方式添加到Map中

參見代碼rest

MagCoreUtil中buildRequestPara方法

2. RSA解密驗證簽名的過程【公鑰解密】

2.1 流讀取方式獲取「參數=參數值」並以「&」鏈接的參數

參見代碼code

驗籤代碼部分getPostData方法

2.1.1 Spring Boot流讀取參數方法

地址blog

https://my.oschina.net/u/3193075/blog/3080552

2.2 將獲取的參數封裝成Map

參見代碼排序

驗籤部分 transferToMap方法

2.3 驗證數字簽名

2.3.1 去掉value爲空及key爲sign(簽名結果)的數據獲得新的Map

參見代碼字符串

MagCoreUtil中paraFilter

2.3.2 將上述處理完的Map的Key按照ASCII碼排序並封裝成「參數=參數值」模式以「&」鏈接獲得String

MagCoreUtil中方法createLinkString

2.3.3 利用RSA驗籤,參數上述String、簽名方式、編碼格式和公鑰

參見代碼

RSA的RSA.verify(src, sign, BdPayCommData.BD_PUBLIC_KEY, charset)方法

2.4 繼續其餘業務

3. 說明

完整代碼參考

https://gitee.com/YuHuaShan/codes/ewaqxptsri46u1lc53nm097
相關文章
相關標籤/搜索