1. Шифрование и дешифрование DES
пакет com.itjh.javaUtil;импорт java.io.UnsupportedEncodingException;импорт java.security.InvalidKeyException;импорт java.security.NoSuchAlgorithmException;импорт java.security.SecureRandom;импорт java.security.spec.InvalidKeySpecException;импорт javax.crypto.BadPaddingException ;импортировать javax.crypto.Cipher;импортировать javax.crypto.IllegalBlockSizeException;импорт javax.crypto.KeyGenerator;импорт javax.crypto.NoSuchPaddingException;импорт javax.crypto.SecretKey;импорт javax.crypto.SecretKeyFactory;импорт javax.crypto.spec.DESKeySpec;/** * Шифрование DES и Расшифровать. * * @author Song Lijun* @date 3 июля 2014 г.*/public class DESUtil {/** Security key*/private String keyData = "ABCDEFGHIJKLMNOPQRSTWXYZabcdefghijklmnopqrstwxyz0123456789-_.";/** * Function: Construction* * @author Song Lijun * @дата 3 июля 2014 г. */public DESUtil() {}/** * Функция: Конструкция* * @author Song Lijun* @date 3 июля 2014 г. * @param keyData * key */public DESUtil(String key) { this.keyData = ключ;}/** * Функция: Шифрование (UTF-8) * * @author Song Lijun* @date 3 июля 2014 г.* @param source * Исходная строка * @param charSet * Кодировка * @return String * @throws UnsupportedEncodingException * Исключение кодирования */public String encrypt(String source) бросает UnsupportedEncodingException {return encrypt(source, "UTF-8");}/ * * * * Функция: Расшифровка (UTF-8) * * @автор Сун Лицзюнь* @дата 3 июля 2014 г.* @param EncryptedData * Зашифрованная строка * @return String * @throws UnsupportedEncodingException * Исключение кодирования */public String decrypt(String EncodingData) выдает UnsupportedEncodingException {return decrypt(encryptedData, "UTF-8");}/** * Функция: Шифрование* * @автор Сон Лицзюнь* @дата 3 июля 2014 г.* @param source * Исходная строка * @param charSet * Кодирование * @return String * @throws UnsupportedEncodingException * Исключение кодирования */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;}/** * * Функция: Расшифровка * * @author Song Lijun * @date 3 июля 2014 г. * @param EncodingData * Зашифрованная строка * @param charSet * Кодирование * @return String * @throws UnsupportedEncodingException * Исключение кодирования */public String decrypt(String EncodingData) , String charSet) выдает исключение UnsupportedEncodingException {String descryptedData = null;byte[] ret = descrypt(Base64.decode(encryptedData.toCharArray()));descryptedData = new String(ret, charSet);return descryptedData;}/** * Зашифрованные данные используют сгенерированный ключ для шифрования исходных данных * * @param PrimaryData * Исходные данные * @return byte[] * @author Сонг Лицзюнь* @дата 3 июля 2014 г.*/private byte[] encrypt(byte[]primaryData) {/** Получить ключ безопасности*/byte rawKeyData[] = getKey();/** Алгоритму DES требуется надежный источник случайных чисел*/SecureRandom sr = new SecureRandom () ;/** Создайте объект DESKeySpec, используя исходные данные ключа*/DESKeySpec dks = null;try {dks = new DESKeySpec(keyData.getBytes());} catch (InvalidKeyException e) {e.printStackTrace();}/** Создайте фабрику ключей*/SecretKeyFactory keyFactory = null; попробуйте {keyFactory = SecretKeyFactory.getInstance("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace ( );}/** Используйте фабрику ключей для преобразования DESKeySpec в объект SecretKey*/SecretKey key = null;try {key = keyFactory.generateSecret(dks);} catch (InvalidKeySpecException e) {e.printStackTrace();}/** Объект Cipher фактически завершает операцию шифрования*/Cipher cipher = null;try {cipher = Cipher .getInstance ("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();}/** Инициализировать объект Cipher с помощью ключа*/try {cipher.init(Cipher.ENCRYPT_MODE, key, sr);} catch (InvalidKeyException e) {e.printStackTrace();}/* * Формально выполнить операцию шифрования*/byte EncryptedData[] = null;try {encryptedData = cipher.doFinal(primaryData);} catch (IllegalStateException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();}/** Вернуть зашифрованные данные*/вернуть зашифрованные данные;} /** * Расшифровка данных с помощью ключа* * @param EncryptedData * Зашифрованные данные * @return byte[] * @author Сонг Лицзюнь* @дата, 3 июля 2014 г.*/private byte[] descrypt(byte[] EncryptData) {/** Алгоритму DES требуется надежный источник случайных чисел*/SecureRandom sr = new SecureRandom();/* * Получите ключ безопасности */byte rawKeyData[] = getKey();/** Создайте объект DESKeySpec, используя необработанные данные ключа */DESKeySpec dks = null try; {dks = new DESKeySpec(keyData.getBytes());} catch (InvalidKeyException e) {e.printStackTrace();}/** Создайте фабрику ключей*/SecretKeyFactory keyFactory = null; попробуйте {keyFactory = SecretKeyFactory.getInstance( " DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}/** Используйте фабрику ключей для преобразования DESKeySpec в объект SecretKey */SecretKey key = null;try {key = keyFactory.generateSecret(dks);} catch (InvalidKeySpecException e) {e.printStackTrace();}/** На самом деле объект шифрования завершена операция шифрования*/Cipher cipher = null;try {cipher = Cipher.getInstance("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();}/** Инициализировать объект Cipher с помощью ключа*/try {cipher.init(Cipher.DECRYPT_MODE, key, sr);} catch (InvalidKeyException e) {e.printStackTrace();}/** Формальное выполнение операции дешифрования*/byte decryptedData[] = null;try {decryptedData = cipher.doFinal(encryptedData);} catch (IllegalStateException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} вернуть расшифрованные данные;}/** * Этот метод получения ключа безопасности недействителен, поскольку каждый раз, когда ключ генерируется, ключ, используемый для дешифрования и шифрования, отличается, что приводит к ошибке. Указанный финальный блок * не заполнен должным образом * * @return byte array* @author Song. Лицзюнь* @ дата 3 июля 2014 г.*/private byte[] getKey() {/** Алгоритму DES требуется надежный источник случайных чисел*/SecureRandom sr = new SecureRandom();/** Сгенерируйте объект генератора ключей для выбранного нами алгоритма DES */KeyGenerator кг = null;try {kg = KeyGenerator.getInstance("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}kg.init ( sr);/** Генерировать класс инструмента ключа*/SecretKey key =kg.generateKey();/** Генерировать массив байтов ключа*/byte rawKeyData[] = key.getEncoded(); вернуть rawKeyData;}}
2. Шифрование и дешифрование Base64.
пакет com.itjh.javaUtil;import java.io.*;/** * Кодирование и декодирование Base64. * * @author Song Lijun* @date 3 июля 2014 г.*/public class Base64 {public Base64() {}/** * Функция: закодированная строка* * @author Song Lijun* @date 3 июля 2014 г.* @param data * Исходная строка* @return String */public static String encode(String data) {return new String(encode(data.getBytes()));}/** * Функция: декодировать строку* * @author Song Lijun* @date 3 июля 2014 г.* @param data * исходная строка* @return String */public static String decode(String data) {return new String(decode(data .toCharArray( )));}/** * Функция: Кодировка byte[] * * @author Song Lijun* @date 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] = алфавит[(quad ? (val & 0x3F) : 64)];val >>= 6;out[index + 2] = алфавит[(trip ? (val & 0x3F) : 64)];val >>= 6;out[index + 1] = алфавит[val & 0x3F ];val >>= 6;out[index + 0] = алфавит[val & 0x3F];}return out;}/** * Функция: декодирование* * @author Сонг Лицзюнь* @дата, 3 июля 2014 г.* @param data * Массив кодированных символов* @return byte[] */public static byte[] decode(char[] data) {int tempLen = data.length;for ( int ix = 0; ix < data.length; ix++) {if ((data[ix] > 255) || коды[data[ix]] < 0) {--tempLen; // игнорировать недопустимые символы и заполнение}}// вычисляем необходимую длину:// -- 3 байта для каждых 4 допустимых символов base64 // -- плюс 2 байта, если есть 3 дополнительных символа base64,/ /или плюс 1 байт, если есть 2 доп.int len = (tempLen / 4) * 3;if ((tempLen % 4) == 3) {len += 2;}if ((tempLen % 4) == 2) {len += 1;}byte[] out = new byte[len];intshift = 0; // количество лишних битов, сохраненных в accumint accum = 0; // лишний индекс битсинта = 0; // теперь мы проходим по всему массиву (НЕ используя значение 'tempLen') for (int ix = 0; ix < data.length; ix++) {int value = (data[ix] > 255) ? -1 : code[data[ix]];if (value >= 0) { // пропускаем не-codeaccum <<= 6 // биты сдвигаются вверх на 6 каждый раз += 6; // цикл, в который новые биты помещаются |= value; // внизу.if (shift >= 8) { // всякий раз, когда сдвигается 8 или более,shift -= 8 // выпишите их (из вверху, оставляя Anyout[index++] = // лишнее внизу для следующей итерации.(byte) ((accum >>shift) & 0xff);}}}// если что-то ВСЕ ЕЩЕ не так, нам просто нужно выбросить now!if (index != out.length) {throw new Error("Неправильно вычислена длина данных (записано " + index+ " вместо " + out.length + ")");}return out;}/** * Функция: Закодировать файл* * @author Song Lijun* @date 3 июля 2014 г.* @param file * Исходный файл*/public static void encode(File file) выдает IOException {if (!file.exists()) {System. (0);}else {byte[] декодировано = readBytes(файл);char[] закодировано = закодировано(декодировано);writeChars(файл, закодировано);}file = null;}/** * Функция: декодировать файлы. * * @author Song Lijun* @date 3 июля 2014 г.* @param file * Исходный файл* @throws IOException */public static void decode(File file) выдает IOException {if (!file.exists()) {System. (0);} else {char[] закодировано = readChars(файл);byte[] декодировано = decode(закодировано);writeBytes(file, decoded);}file = null;}//// кодовые символы для значений 0..63//private static char[] алфавит = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();//// таблица поиска для конвертации символы base64 для значения в диапазоне 0..63//частные статические коды byte[] = new byte[256];static {for (int i = 0; i < 256; i++) {codes[i] = -1;// LoggerUtil.debug(i + "&" + коды[i] + " ");}for (int i = 'A'; i <= 'Z'; i++) {codes[i] = (байт) (i - 'A');// LoggerUtil.debug(i + "&" + коды[i] + " ");}for (int i = 'a'; i <= 'z'; i++) {codes[i] = (байт) (26 + i - 'a');// LoggerUtil.debug(i + "&" + коды[i] + " ");}for (int i = '0'; i <= '9 '; я++) {codes[i] = (byte) (52 + i - '0'); // LoggerUtil.debug(i + "&" + code[i] + " ");}codes['+'] = 62; коды['/'] = 63;}частный статический байт[] readBytes (файл-файл) выдает 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();} наконец {попробуйте {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 (файл-файл) выдает IOException {CharArrayWriter caw = new CharArrayWriter(); Reader fr = null; Reader in = null; попробуйте {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);}}} наконец {попробуйте {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) выдает IOException {OutputStream fos = null; OutputStream os = null; попробуйте {fos = new FileOutputStream(file);os = new BufferedOutputStream(fos);os.write(data);} наконец {try {if ( os != null)os.close();if (fos != null)fos.close();} catch (Исключение e) {System.out.println(e);}}}private static void writeChars(File file, char[] data) выдает IOException {Writer fos = null; Writer os = null; попробуйте {fos = new FileWriter(file);os = новый BufferedWriter(fos);os.write(data);} наконец {try {if (os != null)os.close();if (fos != null)fos.close();} catch (Exception e) {e.printStackTrace();}}}// //////////////////////// / ///////////////////////////// конец тестового кода.// /////////////////////////////////////////////////// ///}
PS: Что касается технологии шифрования, на этом сайте также представлены следующие инструменты шифрования:
Инструмент кодирования и декодирования BASE64: http://tools.VeVB.COm/transcoding/base64.
Онлайн-инструмент шифрования MD5: http://tools.VeVB.COm/password/CreateMD5Password.
Инструмент Escape-шифрования/дешифрования: http://tools.VeVB.COm/password/escapepwd.
Онлайн-инструмент шифрования SHA1: http://tools.VeVB.COm/password/sha1encode.
Инструмент онлайн-генерации короткой ссылки (короткий URL-адрес): http://tools.VeVB.COm/password/dwzcreate
Короткая ссылка (короткий URL-адрес) онлайн-инструмента восстановления: http://tools.VeVB.COm/password/unshorturl
Генератор надежных паролей: http://tools.VeVB.COm/password/CreateStrongPassword.