Java中MessageDigest来实现数据加密的方法
MessageDigest
MessageDigest类为应用程序提供信息摘要算法的功能,如MD5或SHA算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。
MessageDigest对象开始被初始化。该对象通过使用update方法处理数据。任何时候都可以调用reset方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用digest方法之一完成哈希计算。
对于给定数量的更新数据,digest方法只能被调用一次。digest被调用后,MessageDigest对象被重新设置成其初始状态。
举个简单的md5加密的例子:
packagecom.company;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
publicclassMessageDigestTest{
publicstaticvoidmain(String[]args)throwsNoSuchAlgorithmException{
Stringsource="123123";
Stringmd5Str=getMd5(source);
System.out.println(md5Str);
}
/**
*通过md5进行加密
*@paramsource要加密的数据
*@return
*@throwsNoSuchAlgorithmException
*/
privatestaticStringgetMd5(Stringsource)throwsNoSuchAlgorithmException{
//1.获取MessageDigest对象
MessageDigestdigest=MessageDigest.getInstance("md5");
//2.执行加密操作
byte[]bytes=source.getBytes();
//在MD5算法这,得到的目标字节数组的特点:长度固定为16
byte[]targetBytes=digest.digest(bytes);
//3.声明字符数组
char[]characters=newchar[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//4.遍历targetBytes
StringBuilderbuilder=newStringBuilder();
for(byteb:targetBytes){
//5.取出b的高四位的值
//先把高四位通过右移操作拽到低四位
inthigh=(b>>4)&15;
//6.取出b的低四位的值
intlow=b&15;
//7.以high为下标从characters中取出对应的十六进制字符
charhighChar=characters[high];
//8.以low为下标从characters中取出对应的十六进制字符
charlowChar=characters[low];
builder.append(highChar).append(lowChar);
}
returnbuilder.toString();
}
}
测试结果:
4297F44B13955235245B2497399D7A93
封装成工具类:
packagecom.company;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
publicclassMD5Tool{
privatestaticThreadLocalmd5ToolThreadLocal=newThreadLocal<>();
privateMD5Tool(){
}
/**
*获取一个MD5工具实例
*/
publicstaticMD5ToolgetInstance(){
if(md5ToolThreadLocal.get()==null){
md5ToolThreadLocal.set(newMD5Tool());
}
returnmd5ToolThreadLocal.get();
}
/**
*通过md5进行加密
*
*@paramsource要加密的数据
*@return
*@throwsNoSuchAlgorithmException
*/
publicStringgetMd5(Stringsource)throwsNoSuchAlgorithmException{
//1.获取MessageDigest对象
MessageDigestdigest=MessageDigest.getInstance("md5");
//2.执行加密操作
byte[]bytes=source.getBytes();
//在MD5算法这,得到的目标字节数组的特点:长度固定为16
byte[]targetBytes=digest.digest(bytes);
//3.声明字符数组
char[]characters=newchar[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//4.遍历targetBytes
StringBuilderbuilder=newStringBuilder();
for(byteb:targetBytes){
//5.取出b的高四位的值
//先把高四位通过右移操作拽到低四位
inthigh=(b>>4)&15;
//6.取出b的低四位的值
intlow=b&15;
//7.以high为下标从characters中取出对应的十六进制字符
charhighChar=characters[high];
//8.以low为下标从characters中取出对应的十六进制字符
charlowChar=characters[low];
builder.append(highChar).append(lowChar);
}
returnbuilder.toString();
}
}
到此这篇关于Java中MessageDigest来实现数据加密的方法的文章就介绍到这了,更多相关MessageDigest数据加密内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!