MessageDigest的功能及用法

来源:互联网 发布:网络表小胖斜眼表情包 编辑:程序博客网 时间:2024/05/30 21:58
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举例:


  1. import java.security.*; 
  2. public class myDigest { 
  3.   public static void main(String[] args)  { 
  4.     myDigest my=new myDigest(); 
  5.     my.testDigest(); 
  6.   } 
  7.   public void testDigest() 
  8.   { 
  9.    try { 
  10.      String myinfo="我的测试信息"; 
  11.     //java.security.MessageDigest alg=java.security.MessageDigest.getInstance("MD5"); 
  12.       java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1"); 
  13.       alga.update(myinfo.getBytes()); 
  14.       byte[] digesta=alga.digest(); 
  15.       System.out.println("本信息摘要是:"+byte2hex(digesta)); 
  16.       //通过某中方式传给其他人你的信息(myinfo)和摘要(digesta) 对方可以判断是否更改或传输正常 
  17.       java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1"); 
  18.       algb.update(myinfo.getBytes()); 
  19.       if (algb.isEqual(digesta,algb.digest())) { 
  20.          System.out.println("信息检查正常"); 
  21.        } 
  22.        else 
  23.         { 
  24.           System.out.println("摘要不相同"); 
  25.          } 
  26.    } 
  27.    catch (java.security.NoSuchAlgorithmException ex) { 
  28.      System.out.println("非法摘要算法"); 
  29.    } 
  30.   } 
  31.   public String byte2hex(byte[] b) //二行制转字符串 
  32.     { 
  33.      String hs=""; 
  34.      String stmp=""; 
  35.      for (int n=0;n<b.length;n++) 
  36.       { 
  37.        stmp=(java.lang.Integer.toHexString(b[n] & 0XFF)); 
  38.        if (stmp.length()==1) hs=hs+"0"+stmp; 
  39.        else hs=hs+stmp; 
  40.        if (n<b.length-1)  hs=hs+":"; 
  41.       } 
  42.      return hs.toUpperCase(); 
  43.     } 

复制代码
转自:http://www.apkbus.com/android-17830-1-1.html
原创粉丝点击