相較VB版的AzDGCrypt,Java版提供自訂私匙傳入參數及指定字元集
import java.io.UnsupportedEncodingException; import java.util.*; import java.security.*; public class AzDg { private static String strPrivateKey = "0123456789"; public static byte[] encode(byte[] argAbteSource, byte[] argAbteEncryptKey) { argAbteEncryptKey = new Md5().getMD5ofStr(new String(argAbteEncryptKey)).toLowerCase().getBytes(); byte bteCRCLength = 0; byte[] abteReturn = new byte[argAbteSource.length]; for (int i = 0; i < argAbteSource.length; ++i) { bteCRCLength = (bteCRCLength > 31) ? 0 : bteCRCLength; abteReturn[i] = (byte)(argAbteSource[i] ^ argAbteEncryptKey[bteCRCLength++]); } return abteReturn; } public static String encrypt(String argStrSource) { return encrypt(argStrSource, strPrivateKey); } public static String encrypt(String argStrSource, String argStrPrivateKey) { return encrypt(argStrSource, argStrPrivateKey,"UTF8"); } public static String encrypt(String argStrSource, String argStrPrivateKey, String argStrCharset) { String strReturn = null; try { strReturn = new String(encrypt(argStrSource.getBytes(argStrCharset), argStrPrivateKey.getBytes(argStrCharset)),argStrCharset); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return strReturn; } public static byte[] encrypt(byte[] argStrSource, byte[] argBteKey) { byte[] abteEncryptKey = new Md5().getMD5ofStr(Long.toString( Calendar.getInstance().getTimeInMillis())).getBytes(); byte bteCRCLength = 0; byte[] abteReturn = new byte[argStrSource.length * 2]; for (int i = 0, j = 0; i < argStrSource.length; ++i, ++j) { bteCRCLength = bteCRCLength > 31 ? 0 : bteCRCLength; abteReturn[j] = abteEncryptKey[bteCRCLength]; ++j; abteReturn[j] = (byte)(argStrSource[i] ^ abteEncryptKey[bteCRCLength++]); } return Base64.encode(encode(abteReturn, argBteKey)); } public static String decrypt(String argStrSource) { return decrypt(argStrSource,strPrivateKey); } public static String decrypt(String argStrSource, String argStrPrivateKey) { return decrypt(argStrSource, argStrPrivateKey, "UTF8"); } public static String decrypt(String argStrSource, String argStrPrivateKey, String argStrCharset) { String strReturn =""; try { strReturn= new String(decrypt(Base64.decode(argStrSource), argStrPrivateKey.getBytes(argStrCharset)),argStrCharset); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return strReturn; } public static byte[] decrypt(byte[] argStrSource, byte[] argStrPrivateKey) { argStrSource = encode(argStrSource, argStrPrivateKey); byte[] abteReturn = new byte[(int)(argStrSource.length / 2)]; for (int i = 0, j = 0; i < argStrSource.length; ++i, ++j) { abteReturn[j] = (byte)(argStrSource[i] ^ argStrSource[++i] ); } return abteReturn; } public static byte[] md5Byte(String d) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(d.getBytes()); return md.digest(); } }
沒有留言:
張貼留言