消息摘要。这是一种与消息认证码结合使用以确保消息完整性的技术。主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等, 目前广泛使用的算法有MD4、MD5、SHA-1,jdk1.5对上面都提供了支持,在java中进行消息摘要很简单, java.security.MessageDigest提供了一个简易的操作方法。
消息摘要只能检查消息的完整性,但是单向的,对明文消息并不能加密。
/**
*
*/
package security;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringBufferInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* DESC:
* 消息摘要。这是一种与消息认证码结合使用以确保消息完整性的技术。主要使用单向散列函数算法,
* 可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,
* 目前广泛使用的算法有MD4、MD5、SHA-1,jdk1.5对上面都提供了支持,在java中进行消息摘要很简单,
* java.security.MessageDigest提供了一个简易的操作方法。
* 消息摘要只能检查消息的完整性,但是单向的,对明文消息并不能加密
*
* @Copyright YangFei
* </p>
* @author yfei Date:2013-8-28
*/
public class MessageDigestUtil {
static final int BUFFERSIZE = 2048;
public static MessageDigest md ;
static {
try {
md = MessageDigest.getInstance("MD5"); // MD5,SHA-1
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* digest
* @param input
* @return
* @throws IOException
*
*/
public static String digest(InputStream input) throws IOException{
byte[] buffer = new byte[BUFFERSIZE];
int i;
while((i=input.read(buffer))!=-1){
md.update(buffer,0,i);
}
BigInteger bigInteger = new BigInteger(1, md.digest());
return bigInteger.toString(16);
}
public static void main(String args[]) {
InputStream input = null ;
try {
input = new FileInputStream(new File("testData/test.docx"));
//input = new StringBufferInputStream("sdf1");
System.out.println(digest(input));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}