jsrsasign的簽名實現

參考jsrsa簽名實現

參考基於jsrsasign框架的vue在rsa的簽名過程

參考:https://www.jianshu.com/p/78821648d6ff

應用庫: http://kjur.github.io/jsrsasign/  

github: https://github.com/machinewu/jsrsasign


這個是由前端用私鑰簽名,後端用公鑰驗證的過程。

前端生成隨機的32位隨機數,然後用私鑰加密,然後轉成base64格式,這些方法都在jsrsasign中有對應方法,官網中有說明。

這個前端的加密簽名過程用了我一天的時間,崩潰到懷疑人生啊!!

主要參考是第二個,雖然是vue的,但是講解比較清楚。

爲什麼一個加密過程花費了我一天的時間!總結了下

1. 還是對加密解密的一些概念不懂,leader給了一個私鑰“MIIBUgIBADANBgkqhkiG9w0BAQEFAASCATwwggE4AgEAAkEAgDR9FwK5Je5TNE8KP2X5j7VUP1ioWs2mSNk+mWWbYTQ3AXfLPPdRhHFCVfBfmFopc3azL+9l9YMqaYfV+uyEZQIDAQABAkB76T9VtC4a+SO2FQbEi90PBqUsrJXbXZRwKHiWblwlL5n5DaFmqBTGU1ZsZxW17vQss254Om4Ct97DHCAYVjhBAiEA4LGn6nyXW1AcVRkBibZV3EYKOqoNsQb9tR3EE4clW0kCIQCSEUhhB3fEzpK1/8c2Lk1ty03zzL4bmULfJfj7YTOkPQIgSYR3P3bCgyMEEifbY/afwzG7eRRY5Ho4GsGBfS4z39kCIAnIOIWu/1lh0Dd6ErhRL4RL2kOakZy9jdnt7BfBsbitAh89IAnbzwvHMSeSCv3eXzh+NgQHQeUJD7EVcm7BD0pl”,我直接就去庫中找api,可是忽略了蜜月需要帶有‘—–BEGIN PRIVATE KEY—–’以及相應的尾標識。

2. 然後開始不知道PCK#8和PCK#1,雖然現在也不知道。。。不過仔細看官網的api說明還是可以摸索到正確答案的。

3. 就是一直驗證不通過我開始用

sig.updateHex(uuid);其實應該用

sig.updateString(uuid);

4. 最後獲取簽名的時候用sig.sign()而不是sig.hSgin或者別的其他

5. 給後端傳簽名的時候,加號沒有了,然後就用了encodeURICompoent來轉碼,後端解碼,done!


注意:

密鑰對需要帶有‘—–BEGIN PRIVATE KEY—–’以及相應的尾標識密鑰
對格式爲PCK#8時使用KEYUTIL.getKey(yourPEMKey)進行解析,而PCK#1則使用rsa.readPrivateKeyFromPEMString
sig.sign()生成的是一串16進制字符串(hexadecimal),通過需要轉換爲base64位使用,通過jsrsasign的全局方法hextob64()進行轉換。文檔見jsrsasign的global相關方法
最後根據情況 需要使用encodeURICompoent(sign)將加密後的密文進行轉碼,因爲一些+號傳到後端可能不識別。



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