消息摘要。这是一种与消息认证码结合使用以确保消息完整性的技术。主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等, 目前广泛使用的算法有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();
- }
- }
- }
- }