package com.java.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/** 
 * @author admin
 * @since  2008-11-18
 */
public class MyDigest { /**
 *  admin
 *  消息摘要MD5和SHA的使用 
 *  加密算法 非对称加密
 *  info and infoed 是用来区分发送方发送的数据和接收方收到的数据
 */
public static void testDigest() {
String info = "这是我明文我 来加密我啊";
try {
// MessageDigest md = MessageDigest.getInstance("SHA-1");
MessageDigest md = MessageDigest.getInstance("MD5");
//添加要计算摘要的信息
md.update(info.getBytes());
//计算摘要
byte[] digest = md.digest();



//发送给其他人的消息和消息的摘要
//其他人用相同的方法初始化,添加信息,最后进行比较摘要是否相同// String infoed = "这是我明文我 来加密我啊,给她变了";
String infoed = "这是我明文我 来加密我啊";
// MessageDigest mdg = MessageDigest.getInstance("SHA-1");
MessageDigest mdg = MessageDigest.getInstance("MD5");
mdg.update(infoed.getBytes());
//比较两个的摘要是不是一样的
if(mdg.isEqual(digest, mdg.digest())) {
System.out.println("....信息检查正常......");
System.out.println("本明文的消息摘要是 : "+byte2string(digest));
System.out.println("传输后的消息摘要是:  "+byte2string(mdg.digest()));
}else {
System.out.println(".....信息被别人修改过.....");
System.out.println("原明文的消息摘要是:"+byte2string(digest));
System.out.println("修改后的消息摘要是:"+byte2string(mdg.digest()));
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
public static String byte2string(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();

public static void main(String[] args) {
testDigest();

}
}