Java安全学习笔记(六)-使用消息摘要验证口令
来源:互联网 发布:淘宝q币劵 lol半价 编辑:程序博客网 时间:2024/05/01 18:51
使用消息摘要验证口令
本实例介绍如何使用所保存的消息摘要验证用户输入的口令是否正确。若账号和口令都与保存在user_pass.txt中的相同,则提示“账号和口令都正确”,否则提示"错误的账号或口令"。不过这代码的逻辑总是有点奇葩哈哈。
使用消息摘要验证口令的技术要点如下:
1.读取文件中对应账号,口令的消息摘要
2.生成用户输入的口令的消息
3.将用户输入的口令的摘要和文件中保存的口令摘要进行对比。
package core;import java.io.BufferedReader;import java.io.FileReader;import java.security.MessageDigest;public class Validate_Mess {public static void main(String[] args) throws Exception {/* 读取文件中的账号和口令摘要 */String user = "";String passwd = "";BufferedReader in = new BufferedReader(new FileReader("user_pass.txt"));while ((user = in.readLine()) != null) {// 感觉挺奇葩的逻辑哈哈passwd = in.readLine();if (user.equals("msg")) {break;}}/* 生成用户输入的口令摘要 */MessageDigest md = MessageDigest.getInstance("MD5");md.update("pass".getBytes("UTF8"));// 模拟用户输入口令 ,同时把原密码口令pass转换成字节数组byte b[] = md.digest();String result = "";for (int i = 0; i < b.length; i++) {result += Integer.toHexString((0x000000ff & b[i]) | 0xffffff00).substring(6);}/* 检测口令摘要是否匹配 */if (user.equals("msg") && result.equals(passwd)) {System.out.println("账号和口令都正确");} else {System.out.println("错误的账号或口令");}in.close();}}
源程序解读
1.因为在user_pass.txt中,第一行保存的是账号,第二行保存的是账号对应的口令的消息摘要,所以以行地形式来读取用户账号对应的口令的消息摘要。
2.MessageDigest通过getInstance("MD5") 方法创建对象
3.MessageDigest的update方法中,传入的参数是字节类型或字节类型数组,对于字符串,需要先使用getBytes()方法生成字符串数组。
4.MessageDigest的digest()方法作用是计算消息摘要,计算的结果通过字节类型数组返回。
5. Integer.toHexString((byteVar & 0x000000FF) | 0xFFFFFF00).substring(6) 作用是为了显示一个byte型的单字节十六进制(两位十六进制表示)的编码,请使用:
byteVar & 0x000000FF的作用是,如果byteVar 是负数,则会清除前面24个零,正的byte整型不受影响。(...) | 0xFFFFFF00的作用是,如果byteVar 是正数,则置前24位为1,这样toHexString输出一个小于等于15的byte整型的十六进制时,倒数第二位为零且不会被丢弃,这样可以通过substring方法进行截取最后两位即可(一个字节从下标第6第7的位置的元素)。
6.最后比较用户输入的口令的消息摘要和文件中保存的口令摘要是否一致,当账号和口令摘要都与文件中保存一致时,则验证通过。
阅读全文
0 0
- Java安全学习笔记(六)-使用消息摘要验证口令
- Java安全学习笔记(七)-攻击消息摘要保存的口令
- Java安全学习笔记(五)-计算消息摘要
- Java安全之消息摘要
- Java安全之消息摘要
- Java学习笔记:java中MD5消息摘要算法
- [Java 安全]消息摘要与数字签名
- [Java 安全]消息摘要与数字签名
- [Java 安全]消息摘要与数字签名
- Java安全之消息摘要算法
- Java消息中间件学习笔记六 -- Spring JMS理论
- Yii2学习笔记(六):验证器captcha的使用
- java 基于MAC(消息验证码)的数字摘要
- Java学习笔记(六)使用对象
- WCF使用安全证书验证消息加密
- java安全框架-Shiro学习笔记(六)-url匹配方式+shiro标签使用+session会话机制
- java安全-----摘要
- JAVA消息摘要用处
- 京东iOS客户端组件管理实践
- theano switch函数
- 多媒体 MP4V2 录制mp4(h264+aac)音视频同步
- java mongodb aggregate用法
- Intellij idea导入eclipse项目后编译报illegal character: \65279
- Java安全学习笔记(六)-使用消息摘要验证口令
- java练习——符号生成图形2
- 控制滚动标签元素的同时不滚动页面
- 《C++程序设计教程》——继承与多态
- RTMP在NGINX的启动
- python logging模块详解
- MTK sd中断
- Login,Schema,User,Role之间的关系
- Android 屏幕适配攻略(二)单位dp与px来表示控件的尺寸