标签:image dom 字符 apach com 设计 技术分享 密码 消息
主要分拆成这几个模块来设计接口或者函数
关于加密用的那个随机数
截图1、接口调用,每次调用输出都是不同的
截图2、main函数运行,每次运行的输出都是相同的
截图2这种方式一起想不明白,网上查过,也看了点源码,也没得出确切的答案
我猜想是:main函数运行每次使用的种子都是相同的,而通过接口调用时种子更新了
源码中的注解,看起来run main函数时JDK不认为是a call
为什么多次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、再用这个伪随机数把要验证的密码字符串用相同的加密方法加密后,与保存的正确密码进行比较
标签:image dom 字符 apach com 设计 技术分享 密码 消息
原文地址:https://www.cnblogs.com/financial/p/9712425.html