|
简单加密/解密方法包装, 含encode(),decode(),md5()
|
| 发表日期:2004-07-30 18:11:27 | 作者: 出处: |
|
package steeven;
/* 用途: 简单加密/解密方法包装 作者: steeven@kali.com.cn 日期: 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()); } }
| |
|
|
|
| |
【返回顶部】
【打印本页】
【关闭窗口】
|
|
|