码迷,mamicode.com
首页 > 其他好文 > 详细

密码模块设计

时间:2018-09-27 14:22:10      阅读:439      评论:0      收藏:0      [点我收藏+]

标签:image   dom   字符   apach   com   设计   技术分享   密码   消息   

流程图

 技术分享图片

 

模块

主要分拆成这几个模块来设计接口或者函数

 技术分享图片

 

加密解密

疑問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、再用这个伪随机数把要验证的密码字符串用相同的加密方法加密后,与保存的正确密码进行比较

密码模块设计

标签:image   dom   字符   apach   com   设计   技术分享   密码   消息   

原文地址:https://www.cnblogs.com/financial/p/9712425.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!