1、MD5(信息摘要算法) 和 SHA(安全散列算法)是两种常用的加密算法;

2、java实现加密过程:

创建一个加密工具类为例:

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
//加密类(encrypt:加密)
public class EncryptUtil {

    //通过MD5算法加密,参数传进一个字符串,对该字符串进行加密
    public static String encryptByMd5(String instr) {
      MessageDigest md;                               //定义一个MessageDigest类对象,该类提供处理业务方法
      String outstr = instr;                          //定义一个字符串,用于存放加密后的字符串
       try {
              md = MessageDigest.getInstance("MD5");  //确定计算方法
              BASE64Encoder base64en = new BASE64Encoder();  // JDK中提供了BASE64Encoder和BASE64Decoder,用它们可以非常方便的完成基于BASE64的编码和解码。
              outstr = base64en.encode(md.digest(str.getBytes("UTF-8"))); // 加密
            } catch (NoSuchAlgorithmException e) {
               e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
               e.printStackTrace();
         }
        return outstr;
 }
////通过SHA算法加密,参数传进一个字符串,对该字符串进行加密
 public static String encryptByMd5(String instr) {
      MessageDigest md;                               //定义一个MessageDigest类对象,该类提供处理业务方法
      String outstr = instr;                          //定义一个字符串,用于存放加密后的字符串
       try {
              md = MessageDigest.getInstance("SHA-1");  //确定计算方法
              BASE64Encoder base64en = new BASE64Encoder();  // JDK中提供了BASE64Encoder和BASE64Decoder,用它们可以非常方便的完成基于BASE64的编码和解码。
              outstr = base64en.encode(md.digest(str.getBytes("UTF-8"))); // 加密
            } catch (NoSuchAlgorithmException e) {
               e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
               e.printStackTrace();
         }
        return outstr;
    }

}

MessageDigest类为提供摘要算法的功能,信息摘要是安全的单向哈希函数,接收任意大小的数据,并输出固定长度的哈希值;

MessageDigest类有如下方法:

(1)public static MessageDigest getInstance(String algorithm)throws NoSuchAlgorithmException

——返回实现指定算法的对象,algorithm为请求算法的名称,如MD5,SHA-1;

(2)public void update(byte[] input)

—— 使用指定的byte数组更新摘要;

(3)public byte[] digest()

——通过执行填充等操作完成哈希计算,调用此方法后,摘要被重置,因此该方法只能被调用一次;

(4)public static boolean isEqual(byte[] digesta,byte[]gigestb)

——比较两个摘要的相等性,做简单的字节比较。

 

连接:http://www.ibm.com/developerworks/cn/java/l-security/

http://wenku.baidu.com/view/a4b709c308a1284ac8504360.html