密码模块设计
Posted financial
tags:
篇首语:本文由小常识网(cha138.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、再用这个伪随机数把要验证的密码字符串用相同的加密方法加密后,与保存的正确密码进行比较
以上是关于密码模块设计的主要内容,如果未能解决你的问题,请参考以下文章
基于STM32的LCD1602矩阵键盘电子密码锁电路设计方案(原理图+pcb+源码)
Express接口综合案例(创建项目配置常用中间件路由设计提取控制器模块配置错误统一处理中间件用户注册的数据验证,密码加密)