java 代码
- package com.gemt.dataswap.security;
- import java.security.Security;
- import javax.crypto.Cipher;
- import javax.crypto.KeyGenerator;
- import javax.crypto.SecretKey;
- import javax.crypto.spec.SecretKeySpec;
- import com.gemt.dataswap.util.Constants;
- public class DES {
- public static int _DES = 1;
- public static int _DESede = 2;
- public static int _Blowfish = 3;
- private Cipher p_Cipher;
- private SecretKey p_Key;
- private String p_Algorithm;
- private void selectAlgorithm(int al) {
- switch (al) {
- default:
- case 1:
- this.p_Algorithm = "DES";
- break;
- case 2:
- this.p_Algorithm = "DESede";
- break;
- case 3:
- this.p_Algorithm = "Blowfish";
- break;
- }
- }
- public DES(int algorithm) throws Exception {
- this.selectAlgorithm(algorithm);
- Security.addProvider(new com.sun.crypto.provider.SunJCE());
- this.p_Cipher = Cipher.getInstance(this.p_Algorithm);
- }
- public byte[] getKey() {
- return this.checkKey().getEncoded();
- }
- private SecretKey checkKey() {
- try {
- if (this.p_Key == null) {
- KeyGenerator keygen = KeyGenerator.getInstance(this.p_Algorithm);
- /*
- SecureRandom sr = new SecureRandom(key.getBytes());
- keygen.init(168, sr);*/
- this.p_Key = keygen.generateKey();
- }
- }
- catch (Exception nsae) {}
- return this.p_Key;
- }
- public void setKey(byte[] enckey) {
- this.p_Key = new SecretKeySpec(enckey, this.p_Algorithm);
- }
- public byte[] encode(byte[] data) throws Exception {
- this.p_Cipher.init(Cipher.ENCRYPT_MODE, this.checkKey());
- return this.p_Cipher.doFinal(data);
- }
- public byte[] decode(byte[] encdata, byte[] enckey) throws Exception {
- this.setKey(enckey);
- this.p_Cipher.init(Cipher.DECRYPT_MODE, this.p_Key);
- return this.p_Cipher.doFinal(encdata);
- }
- public String byte2hex(byte[] b) {
- String hs = "";
- String stmp = "";
- for (int i = 0; i < b.length; i++) {
- stmp = Integer.toHexString(b[i] & 0xFF);
- if (stmp.length() == 1) {
- hs += "0" + stmp;
- }
- else {
- hs += stmp;
- }
- }
- return hs.toUpperCase();
- }
- public byte[] hex2byte(String hex) throws IllegalArgumentException {
- if (hex.length() % 2 != 0) {
- throw new IllegalArgumentException();
- }
- char[] arr = hex.toCharArray();
- byte[] b = new byte[hex.length() / 2];
- for (int i = 0, j = 0, l = hex.length(); i < l; i++, j++) {
- String swap = "" + arr[i++] + arr[i];
- int byteint = Integer.parseInt(swap, 16) & 0xFF;
- b[j] = new Integer(byteint).byteValue();
- }
- return b;
- }
- /**
- * this is DES algorithm, the string will be encode become hex
- * @param info
- * @return
- * @throws Exception
- */
- public String encode(String info, byte[] key) {
- setKey(key);
- try{
- return byte2hex(encode(info.getBytes()));
- }
- catch (Exception e)
- {
- return info;
- }
- }
- /**
- * this is DES algorithm, the string will be decode from hex text
- * @param info
- * @return
- * @throws Exception
- */
- public String decode(String info, byte[] key) {
- try {
- return new String(decode(hex2byte(info), key));
- }
- catch (Exception e)
- {
- return info;
- }
- }
- public String decode(String info, String hexkey) throws IllegalArgumentException, Exception {
- return new String(decode(hex2byte(info), hex2byte(hexkey)));
- }
- public static void main(String[] args) throws Exception {
- /*
- String info = "要加密的字串";
- System.out.println("region string:" + info);
- byte[] key; //密钥文件(byte)
- DES des = new DES(DES._DESede); // 声明DES
- //key = des.getKey(); //获取随机生成的密钥
- key = "thisisgeomatthisisgeomat".getBytes();
- des.setKey(key);
- System.out.println("key's length is " + key.length);
- System.out.println("encrypted key(byte):" + new String(key));
- String hexkey = des.byte2hex(key); //生成十六进制密钥
- System.out.println("encrypted key(hex):" + hexkey);
- byte[] enc = des.encode(info.getBytes()); //生成加密文件(byte)
- System.out.println("encrypted string(byte):" + new String(enc));
- String hexenc = des.byte2hex(enc); //生成十六进制加密文件
- System.out.println("encrypted string(hex):" + hexenc);
- byte[] dec = des.decode(enc, des.hex2byte(hexkey)); //解密文件,其中转换十六进制密钥为byte
- System.out.println("decrypted string:" + new String(dec)); //生成解密文件字符串, 与info相同
- */
- DES des = new DES(DES._DESede);
- String info = "大家好,this is a encode & decode test 9875603421???";
- String passinfo = des.encode(info, Constants.PASSWORD_KEY);
- System.out.println("passinfo is :: " + passinfo);
- String oldStr = des.decode(passinfo, Constants.PASSWORD_KEY);
- System.out.println("old string is :: " + oldStr);
- }
- }