- package steeven;
- /*
- 用途: 簡單加密/解密方法包裝
- 作者: [email protected]
- 日期: 12/05/2001
- 感謝: http://www-900.ibm.com/developerWorks/java/l-security/index.shtml
- 說明:
- This Class need JCE, download here:
- http://java.sun.com/security/index.html
- */
- import java.security.*;
- import javax.crypto.*;
- public class Crypt {
- private static String Algorithm="DES"; //定義 加密算法,可用 DES,DESede,Blowfish
- static boolean debug = false;
- static{
- Security.addProvider(new com.sun.crypto.provider.SunJCE());
- }
- //生成密鑰, 注意此步驟時間比較長
- public static byte[] getKey() throws Exception{
- KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);
- SecretKey deskey = keygen.generateKey();
- if (debug)
- System.out.println("生成密鑰:"+byte2hex(deskey.getEncoded()));
- return deskey.getEncoded();
- }
- //加密
- public static byte[] encode(byte[] input,byte[] key) throws Exception{
- SecretKey deskey = new javax.crypto.spec.SecretKeySpec(key,Algorithm);
- if (debug){
- System.out.println("加密前的二進串:"+byte2hex(input));
- System.out.println("加密前的字符串:"+new String(input));
- }
- Cipher c1 = Cipher.getInstance(Algorithm);
- c1.init(Cipher.ENCRYPT_MODE,deskey);
- byte[] cipherByte=c1.doFinal(input);
- if (debug)
- System.out.println("加密後的二進串:"+byte2hex(cipherByte));
- return cipherByte;
- }
- //解密
- public static byte[] decode(byte[] input,byte[] key) throws Exception{
- SecretKey deskey = new javax.crypto.spec.SecretKeySpec(key,Algorithm);
- if (debug)
- System.out.println("解密前的信息:"+byte2hex(input));
- Cipher c1 = Cipher.getInstance(Algorithm);
- c1.init(Cipher.DECRYPT_MODE,deskey);
- byte[] clearByte=c1.doFinal(input);
- if (debug){
- System.out.println("解密後的二進串:"+byte2hex(clearByte));
- System.out.println("解密後的字符串:"+(new String(clearByte)));
- }
- return clearByte;
- }
- //md5()信息摘要, 不可逆
- public static byte[] md5(byte[] input) throws Exception{
- java.security.MessageDigest alg=java.security.MessageDigest.getInstance("MD5"); //or "SHA-1"
- if (debug){
- System.out.println("摘要前的二進串:"+byte2hex(input));
- System.out.println("摘要前的字符串:"+new String(input));
- }
- alg.update(input);
- byte[] digest = alg.digest();
- if (debug)
- System.out.println("摘要後的二進串:"+byte2hex(digest));
- return digest;
- }
- //字節碼轉換成16進制字符串
- public static String byte2hex(byte[] b) {
- String hs="";
- String stmp="";
- for (int n=0;n<b.length;n++){
- stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
- if (stmp.length()==1)
- hs=hs+"0"+stmp;
- else hs=hs+stmp;
- if (n<b.length-1) hs=hs+":";
- }
- return hs.toUpperCase();
- }
- public static void main(String[] args) throws Exception{
- debug = true;
- // byte[] key = getKey();
- byte[] key = "好好學習".getBytes();
- decode(encode("測試加密".getBytes(),key),key);
- md5("測試加密".getBytes());
- }
- }
【數據加密】簡單加密/解密方法包裝
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.