Java安全学习笔记(五)-计算消息摘要

来源:互联网 发布:数据库高并发处理 编辑:程序博客网 时间:2024/05/22 11:59
计算消息摘要
消息摘要是对原始数据按照一定算法进行计算到计算结果,它主要用于检验原始数据是否被修改过。消息摘要和加密是不同的,从加密的结果可以得到原始数据,从而消息摘要中不可能得到原始数据。本实例演示如何计算消息摘要,并存入指定的文件中。
计算消息摘要的技术要点如下:
1.字符串如何传入-转变为字节数组
2.计算消息摘要-调用digest()方法
3.计算结果如何处理-存入指定文件中
package core;import java.io.PrintWriter;import java.security.MessageDigest;public class messageDigest {public static void main(String[] args) throws Exception {String name = "msg"; // 账号String passwd = "pass"; // 口令MessageDigest md = MessageDigest.getInstance("MD5");// 通过MD5创建MessageDigest对象md.update(passwd.getBytes());// 将口令传入需要计算的字节数组byte s[] = md.digest(); // 进行消息摘要计算String result = "";for (int i = 0; i < s.length; i++) {result += Integer.toHexString((0x000000ff&s[i]) | 0xffffff00).substring(6);}PrintWriter out = new PrintWriter("user_pass.txt"); //out.println(name);// 将账号明文写入指定文件out.println(result);// 将经过消息摘要计算的口令写入指定文件out.close();}}


MessageDigest通过getInstance("MD5") 方法创建对象
MessageDigest的update方法中,传入的参数是字节类型或字节类型数组,对于字符串,需要先使用getBytes()方法生成字符串数组。
MessageDigest的digest()方法作用是计算消息摘要,计算的结果通过字节类型数组返回。
Integer.toHexString((byteVar & 0x000000FF) | 0xFFFFFF00).substring(6) 作用是为了显示一个byte型的单字节十六进制(两位十六进制表示)的编码,请使用:
 byteVar & 0x000000FF的作用是,如果byteVar 是负数,则会清除前面24个零,正的byte整型不受影响。(...) | 0xFFFFFF00的作用是,如果byteVar 是正数,则置前24位为1,这样toHexString输出一个小于等于15的byte整型的十六进制时,倒数第二位为零且不会被丢弃,这样可以通过substring方法进行截取最后两位即可(一个字节从下标第6第7的位置的元素)。

原创粉丝点击