2009年10月8日 星期四

使用Java實作單向加密(MD5,SHA-1)功能

package com.nelson.util;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
/**
* 此類別提供文字加密功能其加密之演算法可為MD5,SHA-1,SHA-256,SHA-384,SHA-512等.
*
* 文件建立日期:2009/10/08
* @author Nelson Chen
*
*/
public class Encryption {
public Encryption(){
}
/**
* 此method提供加密之功能.
* @param strPlanText 欲加密的文字.
* @param strAlgorithm 欲使用加密的演算法:MD5,SHA-1,SHA-256,SHA-384,SHA-512.
* @param strEncoding 文字之編碼:UTF-8,UTF-16,
* @return 回傳一串加密後的文字.
*/
public String Encrypt(String strPlanText,String strAlgorithm,String strEncoding){
String strEncrypt = null;
MessageDigest md = null;
try{
if(strEncoding==null || strEncoding.equals("")){
strEncoding = "UTF-8";
}
if(strAlgorithm==null || strAlgorithm.equals("")){
strAlgorithm = "MD5";
}
byte[] bstr = strPlanText.getBytes(strEncoding);
md = MessageDigest.getInstance(strAlgorithm);
md.update(bstr);
strEncrypt = (new BASE64Encoder()).encode(md.digest());
}catch(UnsupportedEncodingException ue){
ue.printStackTrace();
System.out.println(ue.getMessage());
return null;
}catch(NoSuchAlgorithmException na){
na.printStackTrace();
System.out.println(na.getMessage());
return null;
}
return strEncrypt;
}
/**
* 驗證加密功能是否正確!!
*/
public static void main(String[] args){
String chartCode = "UTF-8";
String chartCode1 = "UTF-16";
String inputStr = "Nelson";
Encryption enc = new Encryption();
System.out.println("input String:"+inputStr+",Encryption(SHA-1):"+enc.Encrypt(inputStr, "SHA-1",chartCode));
System.out.println("input String:"+inputStr+",Encryption(SHA-256):"+enc.Encrypt(inputStr, "SHA-256",chartCode));
System.out.println("input String:"+inputStr+",Encryption(SHA-384):"+enc.Encrypt(inputStr, "SHA-384",chartCode));
System.out.println("input String:"+inputStr+",Encryption(MD5):"+enc.Encrypt(inputStr, "MD5",chartCode));
System.out.println("input String:"+inputStr+",Encryption(MD5):"+enc.Encrypt(inputStr, "MD5",chartCode1));
}
}

沒有留言:

張貼留言