Java_DES加解密

来源:互联网 发布:淘宝新店访客多少正常 编辑:程序博客网 时间:2024/05/16 08:11
import java.security.Key;import java.text.SimpleDateFormat;import java.util.Date;import javax.crypto.Cipher;import org.springframework.util.StringUtils;/** * Utility for encrypting and decrypting Strings. */public class CryptUtils {public static String DEFAULT_KEY = "ids2012";private Cipher encryptCipher = null;private Cipher decryptCipher = null;private final char[] sHexCharactors = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };public CryptUtils(String key) {if(StringUtils.isEmpty(key)){key = Constant.DES_DEFAULT_KEY;}init(key);};public CryptUtils() {init(Constant.DES_DEFAULT_KEY);};private void init(String keyString) {Key key = null;try {key = getKey(keyString.getBytes());this.encryptCipher = Cipher.getInstance("DES");this.encryptCipher.init(Cipher.ENCRYPT_MODE, key);this.decryptCipher = Cipher.getInstance("DES");this.decryptCipher.init(Cipher.DECRYPT_MODE, key);} catch (Exception e) {}}/** * Convert byte array to string, byte[]{8, 16} will be converted to 0811. *  * @param array * @return */public String toHexString(byte[] array) {if (null == array) {return null;}int length = array.length;StringBuilder sb = new StringBuilder(length << 1);for (int i = 0; i < length; i++) {int b = array[i];int low = b & 0xf;b = b >> 4;int high = b & 0xf;sb.append(sHexCharactors[high]);sb.append(sHexCharactors[low]);}return sb.toString();}/** * Convert string to byte array. *  * @param s * @return * @see #toHexString(byte[]) */public byte[] toByteArray(String s) {if (null == s) {return null;}String sub = s;int len = sub.length();byte[] array = new byte[len >> 1];for (int i = 0, j = 0; i < len; i += 2, j++) {char highChar = sub.charAt(i);char lowChar = sub.charAt(i + 1);String str = new String(new char[] { highChar, lowChar });int value = Integer.parseInt(str, 16);array[j] = (byte) value;}return array;}/** * Encrypt a byte array. *  * @param arrB * @return null if any exception is thrown. */public byte[] encrypt(byte[] arrB) {try {return encryptCipher.doFinal(arrB);} catch (Exception e) {return null;}}/** * Encypt a string. *  * @param strIn * @return */public String encrypt(String strIn) {if (null == strIn) {return null;}byte[] data = strIn.getBytes();byte[] encryptData = encrypt(data);return toHexString(encryptData);}/** * Decrypt a byte array. *  * @param arrB * @return null if any exception is thrown. */public byte[] decrypt(byte[] arrB) {try {return decryptCipher.doFinal(arrB);} catch (Exception e) {return null;}}/** * Decrypt the string. *  * @param strIn * @return null if the string passed in is null or exception is thrown. */public String decrypt(String strIn) {byte[] data = toByteArray(strIn);if (null == data) {return null;}byte[] decryptData = decrypt(data);if (null == decryptData) {return null;}return new String(decryptData);}private Key getKey(byte[] data) throws Exception {byte[] keyArray = new byte[8];for (int i = 0; i < data.length && i < keyArray.length; i++) {keyArray[i] = data[i];}Key key = new javax.crypto.spec.SecretKeySpec(keyArray, "DES");return key;}/** * 随机生成6位密码 *  * @return */public static String generatePassword() {String[] pa = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O","P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };StringBuffer sb = new StringBuffer("");for (int i = 0; i < 6; i++) {sb.append(pa[(Double.valueOf(Math.random() * pa.length).intValue())]);}return sb.toString();}public static void main(String[] args) {CryptUtils c = new CryptUtils("ids2012");System.out.println(c.encrypt("12345678"));System.out.println(c.decrypt("3b5aac201dadafe1617c5187b85f3159"));}}

0 0
原创粉丝点击