1. DES encryption and decryption
package com.itjh.javaUtil;import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.security.spec.InvalidKeySpecException;import javax.crypto.BadPaddingException ;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.KeyGenerator;import javax.crypto.NoSuchPaddingException;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;/** * DES encryption and Decrypt. * * @author Song Lijun* @date July 3, 2014*/public class DESUtil {/** Security key*/private String keyData = "ABCDEFGHIJKLMNOPQRSTWXYZabcdefghijklmnopqrstwxyz0123456789-_.";/** * Function: Construction* * @author Song Lijun* @date July 3, 2014 */public DESUtil() {}/** * Function: Construction* * @author Song Lijun* @date July 3, 2014* @param keyData * key */public DESUtil(String key) { this.keyData = key;}/** * Function: Encryption (UTF-8) * * @author Song Lijun* @date July 3, 2014* @param source * Source string * @param charSet * Encoding * @return String * @throws UnsupportedEncodingException * Encoding exception */public String encrypt(String source) throws UnsupportedEncodingException {return encrypt(source, "UTF-8");}/ ** * * Function: Decryption (UTF-8) * * @author Song Lijun* @date July 3, 2014* @param encryptedData * Encrypted string * @return String * @throws UnsupportedEncodingException * Encoding exception */public String decrypt(String encryptedData)throws UnsupportedEncodingException {return decrypt(encryptedData, "UTF-8");}/** * Function: Encryption* * @author Song Lijun* @date July 3, 2014* @param source * Source string * @param charSet * Encoding * @return String * @throws UnsupportedEncodingException * Encoding exception */public String encrypt(String source, String charSet)throws UnsupportedEncodingException {String encrypt = null;byte[] ret = encrypt(source.getBytes (charSet));encrypt = new String(Base64.encode(ret));return encrypt;}/** * * Function: Decryption * * @author Song Lijun * @date July 3, 2014 * @param encryptedData * Encrypted string * @param charSet * Encoding * @return String * @throws UnsupportedEncodingException * Encoding exception */public String decrypt(String encryptedData, String charSet)throws UnsupportedEncodingException {String descryptedData = null;byte[] ret = descrypt(Base64.decode(encryptedData.toCharArray()));descryptedData = new String(ret, charSet);return descryptedData;}/** * Encrypted data uses the generated key to encrypt the original data* * @param primaryData * Original data * @return byte[] * @author Song Lijun* @date July 3, 2014*/private byte[] encrypt(byte[] primaryData) {/** Get the security key*/byte rawKeyData[] = getKey();/** The DES algorithm requires a trusted random number source*/SecureRandom sr = new SecureRandom ();/** Create a DESKeySpec object using the original key data*/DESKeySpec dks = null;try {dks = new DESKeySpec(keyData.getBytes());} catch (InvalidKeyException e) {e.printStackTrace();}/** Create a key factory*/SecretKeyFactory keyFactory = null;try {keyFactory = SecretKeyFactory.getInstance("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace ();}/** Use the key factory to convert DESKeySpec into a SecretKey object*/SecretKey key = null;try {key = keyFactory.generateSecret(dks);} catch (InvalidKeySpecException e) {e.printStackTrace();}/** The Cipher object actually completes the encryption operation*/Cipher cipher = null;try {cipher = Cipher.getInstance ("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();}/** Initialize Cipher object with key*/try {cipher.init(Cipher.ENCRYPT_MODE, key, sr);} catch (InvalidKeyException e) {e.printStackTrace();}/* *Formally perform encryption operation*/byte encryptedData[] = null;try {encryptedData = cipher.doFinal(primaryData);} catch (IllegalStateException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();}/** Return encrypted data*/return encryptedData;} /** * Decrypt data with key* * @param encryptedData * Encrypted data * @return byte[] * @author Song Lijun* @date July 3, 2014*/private byte[] descrypt(byte[] encryptedData) {/** The DES algorithm requires a trusted random number source*/SecureRandom sr = new SecureRandom();/* * Get the security key */byte rawKeyData[] = getKey();/** Create a DESKeySpec object using the raw key data */DESKeySpec dks = null; try {dks = new DESKeySpec(keyData.getBytes());} catch (InvalidKeyException e) {e.printStackTrace();}/** Create a key factory*/SecretKeyFactory keyFactory = null;try {keyFactory = SecretKeyFactory.getInstance( "DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}/** Use the key factory to convert DESKeySpec into a SecretKey object */SecretKey key = null;try {key = keyFactory.generateSecret(dks);} catch (InvalidKeySpecException e) {e.printStackTrace();}/** Cipher object is actually completed Encryption operation*/Cipher cipher = null;try {cipher = Cipher.getInstance("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();}/** Initialize Cipher object with key*/try {cipher.init(Cipher.DECRYPT_MODE, key, sr);} catch (InvalidKeyException e) {e.printStackTrace();}/** Formal execution of decryption operation*/byte decryptedData[] = null;try {decryptedData = cipher.doFinal(encryptedData);} catch (IllegalStateException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} return decryptedData;}/** * This method of obtaining the security key is invalid because each time the key is generated, the key used for decryption and encryption is different, which leads to the error Given final block not * properly padded. * * @return byte array* @author Song Lijun* @ date July 3, 2014*/private byte[] getKey() {/** The DES algorithm requires a trusted random number source*/SecureRandom sr = new SecureRandom();/** Generate a key generator object for the DES algorithm of our choice */KeyGenerator kg = null;try {kg = KeyGenerator.getInstance("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}kg.init (sr);/** Generate key tool class*/SecretKey key = kg.generateKey();/** Generate key byte array*/byte rawKeyData[] = key.getEncoded();return rawKeyData;}}
2. Base64 encryption and decryption
package com.itjh.javaUtil;import java.io.*;/** * Base64 encoding and decoding. * * @author Song Lijun* @date July 3, 2014*/public class Base64 {public Base64() {}/** * Function: encoded string* * @author Song Lijun* @date July 3, 2014* @param data * Source string* @return String */public static String encode(String data) {return new String(encode(data.getBytes()));}/** * Function: decode string* * @author Song Lijun* @date July 3, 2014* @param data * source string* @return String */public static String decode(String data) {return new String(decode(data .toCharArray()));}/** * Function: Encoding byte[] * * @author Song Lijun* @date July 3, 2014* @param data * source* @return char[] */public static char[] encode(byte[] data) {char[] out = new char[((data.length + 2) / 3) * 4];for (int i = 0, index = 0; i < data.length; i += 3, index += 4) {boolean quad = false;boolean trip = false;int val = (0xFF & (int) data[i]);val <<= 8;if ((i + 1) < data.length) {val |= (0xFF & (int) data[i + 1]);trip = true;}val <<= 8;if ((i + 2) < data.length) {val |= (0xFF & (int) data[i + 2]);quad = true;}out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)];val >>= 6;out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)];val >>= 6;out[index + 1] = alphabet[val & 0x3F ];val >>= 6;out[index + 0] = alphabet[val & 0x3F];}return out;}/** * Function: decoding* * @author Song Lijun* @date July 3, 2014* @param data * Encoded character array* @return byte[] */public static byte[] decode(char[] data) {int tempLen = data.length;for ( int ix = 0; ix < data.length; ix++) {if ((data[ix] > 255) || codes[data[ix]] < 0) {--tempLen; // ignore non-valid chars and padding}}// calculate required length:// -- 3 bytes for every 4 valid base64 chars// -- plus 2 bytes if there are 3 extra base64 chars,/ / or plus 1 byte if there are 2 extra.int len = (tempLen / 4) * 3;if ((tempLen % 4) == 3) {len += 2;}if ((tempLen % 4) == 2) {len += 1;}byte[] out = new byte[len];int shift = 0; // # of excess bits stored in accumint accum = 0; // excess bitsint index = 0;// we now go through the entire array (NOT using the 'tempLen' value)for (int ix = 0; ix < data.length; ix++) {int value = (data[ix] > 255) ? -1 : codes[data[ix]];if (value >= 0) { // skip over non-codeaccum <<= 6; // bits shift up by 6 each time thrushift += 6; // loop, with new bits being put inaccum |= value; // at the bottom.if (shift >= 8) { // whenever there are 8 or more shifted in,shift -= 8; // write them out (from the top, leaving anyout[index++] = // excess at the bottom for next iteration.(byte) ((accum >> shift) & 0xff);}}}// if there is STILL wrong something we just have to throw up now!if (index != out.length) {throw new Error("Miscalculated data length (wrote " + index+ " instead of " + out.length + ")");}return out;}/** * Function: Encode file* * @author Song Lijun* @date July 3, 2014* @param file * Source file*/public static void encode(File file) throws IOException {if (!file.exists()) {System. exit(0);}else {byte[] decoded = readBytes(file);char[] encoded = encode(decoded);writeChars(file, encoded);}file = null;}/** * Function: Decode files. * * @author Song Lijun* @date July 3, 2014* @param file * Source file* @throws IOException */public static void decode(File file) throws IOException {if (!file.exists()) {System. exit(0);} else {char[] encoded = readChars(file);byte[] decoded = decode(encoded);writeBytes(file, decoded);}file = null;}//// code characters for values 0..63//private static char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();//// lookup table for converting base64 characters to value in range 0..63//private static byte[] codes = new byte[256];static {for (int i = 0; i < 256; i++) {codes[i] = -1;// LoggerUtil.debug(i + "&" + codes[i] + " ");}for (int i = 'A'; i <= 'Z'; i++) {codes[i] = (byte) (i - 'A');// LoggerUtil.debug(i + "&" + codes[i] + " ");}for (int i = 'a'; i <= 'z'; i++) {codes[i] = (byte) (26 + i - 'a');// LoggerUtil.debug(i + "&" + codes[i] + " ");}for (int i = '0'; i <= '9 '; i++) {codes[i] = (byte) (52 + i - '0');// LoggerUtil.debug(i + "&" + codes[i] + " ");}codes['+'] = 62; codes['/'] = 63;}private static byte[] readBytes(File file) throws IOException {ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] b = null;InputStream fis = null;InputStream is = null;try {fis = new FileInputStream(file);is = new BufferedInputStream(fis);int count = 0;byte[] buf = new byte[16384];while ((count = is.read(buf)) != -1) {if (count > 0) {baos.write(buf, 0, count);}}b = baos.toByteArray();} finally {try {if (fis != null)fis.close();if (is != null)is.close ();if (baos != null)baos.close();} catch (Exception e) {System.out.println(e);}}return b;}private static char[] readChars(File file) throws IOException {CharArrayWriter caw = new CharArrayWriter();Reader fr = null;Reader in = null;try {fr = new FileReader(file);in = new BufferedReader(fr);int count = 0;char [] buf = new char[16384];while ((count = in.read(buf)) != -1) {if (count > 0) {caw.write(buf, 0, count);}}} finally {try {if (caw != null)caw.close();if (in != null)in.close();if (fr != null)fr.close();} catch (Exception e) {System.out.println(e);}}return caw.toCharArray();}private static void writeBytes(File file, byte[] data) throws IOException {OutputStream fos = null;OutputStream os = null;try {fos = new FileOutputStream(file);os = new BufferedOutputStream(fos);os.write(data);} finally {try {if ( os != null)os.close();if (fos != null)fos.close();} catch (Exception e) {System.out.println(e);}}}private static void writeChars(File file, char[] data) throws IOException {Writer fos = null;Writer os = null;try {fos = new FileWriter(file);os = new BufferedWriter(fos);os.write(data);} finally {try {if (os != null)os.close();if (fos != null)fos.close();} catch (Exception e) {e.printStackTrace();}}}// ///////////////////////// ///////////////////////////// end of test code.// /////////////////////////////////////////////////////}
PS: Regarding encryption technology, this site also provides the following encryption tools for your reference:
BASE64 encoding and decoding tool: http://tools.VeVB.COm/transcoding/base64
MD5 online encryption tool: http://tools.VeVB.COm/password/CreateMD5Password
Escape encryption/decryption tool: http://tools.VeVB.COm/password/escapepwd
Online SHA1 encryption tool: http://tools.VeVB.COm/password/sha1encode
Short link (short URL) online generation tool: http://tools.VeVB.COm/password/dwzcreate
Short link (short URL) online restoration tool: http://tools.VeVB.COm/password/unshorturl
Strong password generator: http://tools.VeVB.COm/password/CreateStrongPassword