MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。

MessageDigest 对象开始被初始化。该对象通过使用 update()方法处理数据。任何时候都可以调用 reset()方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用digest() 方法之一完成哈希计算。

对于给定数量的更新数据,digest 方法只能被调用一次。在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。

1、public static MessageDigest getInstance(String algorithm)
throws NoSuchAlgorithmException
   返回实现指定摘要算法的 MessageDigest 对象。
   algorithm - 所请求算法的名称
2、public static MessageDigest getInstance(String algorithm,
String provider)
throws NoSuchAlgorithmException,
NoSuchProviderException
  返回实现指定摘要算法的 MessageDigest 对象。
  algorithm - 所请求算法的名称
  provider - 提供者的名称。
3、public void update(byte[] input)
  使用指定的 byte 数组更新摘要。 
4、public byte[] digest()
  通过执行诸如填充之类的最终操作完成哈希计算。在调用此方法之后,摘要被重置。
5、public static boolean isEqual(byte[] digesta,
byte[] digestb)
比较两个摘要的相等性。做简单的字节比较。

注意:Provider可以通过 Java.security.Security.getProviders() 方法获取已注册提供者列表。比较常用的有“SUN”

SUN提供的常用的算法名称有:MD2
MD5
                        SHA-1
                        SHA-256
                        SHA-384
                        SHA-512

Code举例:

import java.security.*;
public class myDigest {
public static void main(String[] args) {
myDigest my=new myDigest();
my.testDigest();
}
public void testDigest()
{
try {
String myinfo="我的测试信息";
//java.security.MessageDigest alg=java.security.MessageDigest.getInstance("MD5");
java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
alga.update(myinfo.getBytes());
byte[] digesta=alga.digest();
System.out.println("本信息摘要是:"+byte2hex(digesta));
//通过某中方式传给其他人你的信息(myinfo)和摘要(digesta) 对方可以判断是否更改或传输正常
java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1");
algb.update(myinfo.getBytes());
if (algb.isEqual(digesta,algb.digest())) {
System.out.println("信息检查正常");
}
else
{
System.out.println("摘要不相同");
}
}
catch (java.security.NoSuchAlgorithmException ex) {
System.out.println("非法摘要算法");
}
}
public String byte2hex(byte[] b) //二行制转字符串
{
String hs="";
String stmp="";
for (int n=0;n<b.length;n++)
{
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}
}
 
关于Java加密的更多信息:http://www.ibm.com/developerworks/cn/java/l-security/

文章摘于  http://blog.csdn.net/ma1kong/article/details/2662997

最新文章

  1. 八皇后java算法
  2. WebStorm里面配置运行React Native的方案
  3. 今天心情好,一起探讨下《送给大家的200兆SVN代码服务器》怎么管理我们的VS代码?
  4. AspectJ对AOP的实现
  5. 什么是REST?
  6. myeclipse操作记录
  7. 第九章:Javascript类和模块
  8. 4行代码实现js模板引擎
  9. MySql监控优化
  10. .NET知识体系(转载)
  11. ActiveMQ使用
  12. 阿里云搭建JAVA WEB环境(SQL Server + TomCat + 配置域名)
  13. 31_网络编程-struct
  14. 8 map的用法
  15. mysql 数据表的增删改查 目录
  16. redis-redisTemplate模糊匹配删除
  17. 浅谈jQuery构造函数
  18. SpringBoot学习(1)
  19. 线上CPU100%?看看这篇是怎么排查的!
  20. 51nod 1043 数位dp

热门文章

  1. [转帖]上云测试,这些关键点你get 到没有
  2. Java基础笔试练习(四)
  3. 开始使用 Ubuntu(字体渲染去模糊+软件安装+优化配置+常见错误)(29)
  4. Django框架1——视图和URL配置
  5. Python-05-字符串格式化
  6. Python学习路线图【转载】
  7. c++ (1) c++ 与c 的区别
  8. Smart3D飞控&amp;地方坐标系
  9. MLP神经网络实例--手写识别
  10. jQuery标签操作