1. 程式人生 > >密碼模塊設計

密碼模塊設計

ESS 得到 pda 調用 bytes codec 摘要 網上 get

流程圖

技術分享圖片

模塊

主要分拆成這幾個模塊來設計接口或者函數

技術分享圖片

加密解密

疑問1

技術分享圖片

技術分享圖片


關於加密用的那個隨機數
截圖1、接口調用,每次調用輸出都是不同的
截圖2、main函數運行,每次運行的輸出都是相同的

截圖2這種方式一起想不明白,網上查過,也看了點源碼,也沒得出確切的答案

我猜想是:main函數運行每次使用的種子都是相同的,而通過接口調用時種子更新了

技術分享圖片

源碼中的註解,看起來run main函數時JDK不認為是a call

疑問2

為什麽多次sha-1 hash哈希計算都要復位摘要

我猜想是:我們創建的MessageDigest實例,可以當作是一個加密工具,多次用相同的消息摘要對密碼加密的結果進行加密

加密

1、通過java.security.SecureRandom的nextBytes方法得到一個偽隨機salt

2、再通過org.apache.commons.codec.binary.Hex#encodeHexString把偽隨機salt進行Hex編碼,得到可視化字符串再保存

3、用這個偽隨機數salt經過多次 sha-1 hash,得到加密後的密碼再保存

a、 創建sha-1消息摘要對象:java.security.MessageDigest#getInstance("SHA-1")

b、 使用偽隨機數更新摘要:java.security.MessageDigest#update(salt)

c、 完成哈希計算,在調用完成後,摘要被重置:java.security.MessageDigest#digest(password.getBytes())

驗證密碼

1、 用之前保存的Hex編碼後的salt,通過org.apache.commons.codec.binary.Hex#decodeHex進行Hex解碼得到偽隨機salt

2、再用這個偽隨機數把要驗證的密碼字符串用相同的加密方法加密後,與保存的正確密碼進行比較

密碼模塊設計