使用MD5和SHA算法加密信息

3/8/2017来源:ASP.NET技巧人气:2146

在系统中经常要存储一些用户信息,例如登录名和密码,处于安全性考虑,某些信息需要加密之后在存储。目前广泛使用的算法有md5和SHA-1等。

Hash算法主要用于信息安全领域中加密,可以把一些不同长度的信息转化成固定长度的128位编码,MD5和SHA是目前最为广泛的Hash算法,主要用于文件检验,数字签名和鉴权协议等领域。MD5和SHA属于非对称加密算法,一般认为是不可逆的。

java实现MD5和SHA-1算法加密时,主要采用了java.secyrity.MessageDigest类。MessageDigest类为应用程序提供摘要算法的功能。信息摘要是安全的单向散列函数,它接受任意大小的数据,输出固定长度的散列值。

实现MD5 和 SHA加密的实例代码如下:

package com.ttt;

import java.security.MessageDigest;

public class T2 {

	
	public static void main(String[] args) {
		
		T2 mdl = new T2();
		System.out.PRintln(mdl.digestString("lipan", "MD5"));

	}
	
	/**
	 * 将信息按指定的算法加密
	 * @param str  : 要加密的字符串信息
	 * @param digestType  :  加密类型,选择MD5 或 SHA-1
	 * @return   加密之后的内容
	 */
	public String digestString(String str,String digestType){
		MessageDigest md;
		String message = "";
		try{
			md = MessageDigest.getInstance(digestType);
			md.update(str.getBytes());
			message = byteToHex(md.digest());
		} catch(Exception e){
			e.printStackTrace();
		}
		
		return message;
	}
	
	/**
	 * 将字节数组变成十六进制的字符串
	 * @param bytes  字节数组
	 * @return  十六进制的字符串
	 */
	private String byteToHex(byte[] bytes){
		StringBuffer sb = new StringBuffer();
		for(int i=0;i<bytes.length;i++){
			int num = 0xFF & bytes[i];
			if(num < 0x10){
				sb.append("0" + Integer.toHexString(num));
			} else{
				sb.append(Integer.toHexString(num));
			}
			
		}
		return sb.toString();
	}
	
	

}