1. Criptografia e descriptografia DES
pacote com.itjh.javaUtil;importar java.io.UnsupportedEncodingException;importar java.security.InvalidKeyException;importar java.security.NoSuchAlgorithmException;importar java.security.SecureRandom;importar java.security.spec.InvalidKeySpecException;importar javax.crypto.BadPaddingException ;importar javax.crypto.Cipher;importar javax.crypto.IllegalBlockSizeException;importar javax.crypto.KeyGenerator;importar javax.crypto.NoSuchPaddingException;importar javax.crypto.SecretKey;importar javax.crypto.SecretKeyFactory;importar javax.crypto.spec.DESKeySpec;/** * Criptografia DES e Descriptografar. * * @author Song Lijun* @data 3 de julho de 2014*/classe pública DESUtil {/** Chave de segurança*/private String keyData = "ABCDEFGHIJKLMNOPQRSTWXYZabcdefghijklmnopqrstwxyz0123456789-_.";/** * Função: Construção* * @author Song Lijun * @data 3 de julho de 2014 */public DESUtil() {}/** * Função: Construção* * @author Song Lijun* @date 3 de julho de 2014* @param keyData * key */public DESUtil(String key) { this.keyData = key;}/** * Função: Criptografia (UTF-8) * * @autor Song Lijun* @data 3 de julho de 2014* @param fonte * String de origem * @param charSet * Codificação * @return String * @throws UnsupportedEncodingException * Exceção de codificação */public String encrypt(String source) lança UnsupportedEncodingException {return encrypt(source, "UTF-8");}/ * * * * Função: Descriptografia (UTF-8) * * @autor Song Lijun* @data 3 de julho de 2014* @paramcryptedData * String criptografada * @return String * @throws UnsupportedEncodingException * Exceção de codificação */public String decrypt(StringcryptedData)throws UnsupportedEncodingException {return decrypt(encryptedData, "UTF-8");}/** * Função: Criptografia* * @autor Song Lijun* @data 3 de julho de 2014* @param fonte * String de origem * @param charSet * Codificação * @return String * @throws UnsupportedEncodingException * Exceção de codificação */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;}/** * * Função: Descriptografia * * @author Song Lijun * @date 3 de julho de 2014 * @paramcryptedData * String criptografada * @param charSet * Codificação * @return String * @throws UnsupportedEncodingException * Exceção de codificação */public String decrypt(StringcryptedData , String charSet)lança UnsupportedEncodingException {String descryptedData = null;byte[] ret = descrypt(Base64.decode(encryptedData.toCharArray()));descryptedData = new String(ret, charSet);return descryptedData;}/** * Os dados criptografados usam a chave gerada para criptografar os dados originais * * @param PrimaryData * Dados originais * @return byte[] * @author Song Lijun* @date 3 de julho de 2014*/private byte[] encrypt(byte[] PrimaryData) {/** Obtenha a chave de segurança*/byte rawKeyData[] = getKey();/** O algoritmo DES requer uma fonte de número aleatório confiável*/SecureRandom sr = new SecureRandom () ;/** Crie um objeto DESKeySpec usando os dados da chave original*/DESKeySpec dks = null;try {dks = new DESKeySpec(keyData.getBytes());} catch (InvalidKeyException e) {e.printStackTrace();}/** Criar uma fábrica de chaves*/SecretKeyFactory keyFactory = null;try {keyFactory = SecretKeyFactory.getInstance("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace ( );}/** Use a fábrica de chaves para converter DESKeySpec em um objeto SecretKey*/SecretKey key = null;try {key = keyFactory.generateSecret(dks);} catch (InvalidKeySpecException e) {e.printStackTrace();}/** O objeto Cipher realmente conclui a operação de criptografia*/Cipher cipher = null;try {cipher = Cipher .getInstance ("DES");} captura (NoSuchAlgorithmException e) {e.printStackTrace();} captura (NoSuchPaddingException e) {e.printStackTrace();}/** Inicializar objeto Cipher com chave*/try {cipher.init(Cipher.ENCRYPT_MODE, key, sr);} catch (InvalidKeyException e) {e.printStackTrace();}/* * Executar formalmente a operação de criptografia*/byte criptografadoData[] = null;try {encryptedData = cipher.doFinal(primaryData);} catch (IllegalStateException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();}/** Retornar dados criptografados*/returncryptedData;} /** * Descriptografar dados com chave* * @paramcryptedData * Dados criptografados * @return byte[] * @author Song Lijun* @date 3 de julho de 2014*/private byte[] descrypt(byte[]cryptoData) {/** O algoritmo DES requer uma fonte de número aleatório confiável*/SecureRandom sr = new SecureRandom();/* * Obtenha o chave de segurança */byte rawKeyData[] = getKey();/** Crie um objeto DESKeySpec usando os dados da chave bruta */DESKeySpec dks = null; {dks = new DESKeySpec(keyData.getBytes());} catch (InvalidKeyException e) {e.printStackTrace();}/** Crie uma fábrica de chaves*/SecretKeyFactory keyFactory = null;tente {keyFactory = SecretKeyFactory.getInstance( " DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}/** Use a fábrica de chaves para converter DESKeySpec em um objeto SecretKey */SecretKey key = null;try {key = keyFactory.generateSecret(dks);} catch (InvalidKeySpecException e) {e.printStackTrace();}/** O objeto Cipher é na verdade operação de criptografia concluída*/Cipher cipher = null;try {cipher = Cipher.getInstance("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();}/** Inicializar objeto Cipher com chave*/try {cipher.init(Cipher.DECRYPT_MODE, key, sr);} catch (InvalidKeyException e) {e.printStackTrace();}/** Execução formal da operação de descriptografia*/byte decryptedData[] = null;try {decryptedData = cipher.doFinal(encryptedData);} catch (IllegalStateException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} return dados descriptografados;}/** * Este método de obtenção da chave de segurança é inválido porque cada vez que a chave é gerada, a chave usada para descriptografia e criptografia é diferente, o que leva ao erro Dado o bloco final não * devidamente preenchido. Lijun* @ data 3 de julho de 2014*/private byte[] getKey() {/** O algoritmo DES requer uma fonte confiável de números aleatórios*/SecureRandom sr = new SecureRandom();/** Gere um objeto gerador de chave para o algoritmo DES de nossa escolha */KeyGenerator kg = null;try {kg = KeyGenerator.getInstance("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}kg.init ( sr);/** Gera classe de ferramenta de chave*/SecretKey key = kg.generateKey();/** Gera matriz de bytes de chave*/byte rawKeyData[] = key.getEncoded();return rawKeyData;}}
2. Criptografia e descriptografia Base64
package com.itjh.javaUtil;import java.io.*;/** * Codificação e decodificação Base64. * * @author Song Lijun* @date 3 de julho de 2014*/public class Base64 {public Base64() {}/** * Função: string codificada* * @author Song Lijun* @date 3 de julho de 2014* @param data * String de origem* @return String */public static String encode(String data) {return new String(encode(data.getBytes()));}/** * Função: decodificar string* * @author Song Lijun* @date 3 de julho de 2014* @param data * source string* @return String */public static String decode(String data) {return new String(decode(data .toCharArray( )));}/** * Função: Codificação de byte[] * * @author Song Lijun* @date 3 de julho de 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, índice = 0; i < data.length; i += 3, índice += 4) {boolean quad = false;boolean trip = false;int val = (0xFF & (int) data[i]);val <<= 8;if ((i + 1) < data.length) {val |= (0xFF & (int) dados[i + 1]);trip = true;}val <<= 8;if ((i + 2) < data.length) {val |= (0xFF & (int) dados[i + 2]);quad = true;}out[index + 3] = alfabeto[(quad ? (val & 0x3F) : 64)];val >>= 6;out[index + 2] = alfabeto[(trip ? (val & 0x3F) : 64)];val >>= 6;out[index + 1] = alfabeto[val & 0x3F ];val >>= 6;out[index + 0] = alfabeto[val & 0x3F];}return out;}/** * Função: decodificação* * @author Canção Lijun* @data 3 de julho de 2014* @param data * Matriz de caracteres codificados* @return byte[] */public static byte[] decode(char[] data) {int tempLen = data.length;for ( int ix = 0; ix < data.length; ix++) {if ((dados[ix] > 255) || códigos[dados[ix]] < 0) {--tempLen; // ignora caracteres e preenchimento inválidos}}// calcula o comprimento necessário:// -- 3 bytes para cada 4 caracteres base64 válidos// -- mais 2 bytes se houver 3 caracteres base64 extras,/ /ou mais 1 byte se houver 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; // # de bits em excesso armazenados em accumint accum = 0; // excesso de bitsint index = 0;// agora percorremos todo o array (NÃO usando o valor 'tempLen')for (int ix = 0; ix < data.length; ix++) {int value = (dados[ix] > 255) ? -1 : códigos[dados[ix]];if (valor >= 0) { // pular o não-codeaccum <<= 6; // bits aumentam em 6 a cada vez thrushift; += 6; // loop, com novos bits sendo colocados inaccum |= value; // na parte inferior.if (shift >= 8) { // sempre que houver 8 ou mais deslocados,shift -= 8; escreva-os (de no topo, deixando anyout[index++] = // excesso na parte inferior para a próxima iteração.(byte) ((accum >> shift) & 0xff);}}}// se AINDA houver algo errado, só temos que vomitar agora!if (index != out.length) {throw new Error("Comprimento de dados mal calculado (escreveu " + index+ " em vez de " + out.length + ")");}return out;}/** * Função: Encode file* * @author Song Lijun* @date 3 de julho de 2014* @param file * Source file*/public static void encode(File file) lança IOException {if (!file.exists()) {System. (0);}else {byte[] decodificado = readBytes(arquivo);char[] codificado = codificado(decodificado);writeChars(arquivo, codificado);}arquivo = null;}/** * Função: Decodificar arquivos. * * @author Song Lijun* @date 3 de julho de 2014* @param file * Arquivo fonte* @throws IOException */public static void decode(File file) throws IOException {if (!file.exists()) {System. (0);} else {char[] codificado = readChars(arquivo);byte[] decodificado = decodificado(codificado);writeBytes(arquivo, decoded);}file = null;}//// caracteres de código para valores 0..63//private static char[] alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();//// tabela de consulta para conversão caracteres base64 para valor no intervalo 0..63//byte estático privado[] códigos = new byte[256];static {for (int i = 0; i < 256; i++) {codes[i] = -1;// LoggerUtil.debug(i + "&" + códigos[i] + " ");}for (int i = 'A'; i <= 'Z'; i++) {códigos[i] = (byte) (i - 'A');// LoggerUtil.debug(i + "&" + códigos[i] + " ");}for (int i = 'a'; i <= 'z'; i++) {códigos[i] = (byte) (26 + i - 'a');// LoggerUtil.debug(i + "&" + códigos[i] + " ");}for (int i = '0'; i <= '9 ';eu++) {códigos[i] = (byte) (52 + i - '0');// LoggerUtil.debug(i + "&" + códigos[i] + " ");}códigos['+'] = 62; códigos['/'] = 63;}byte estático privado[] readBytes(Arquivo) lança IOException {ByteArrayOutputStream baos = novo ByteArrayOutputStream();byte[] b = null;InputStream fis = null;InputStream is = null;tente {fis = new FileInputStream(file);is = new BufferedInputStream(fis);int count = 0;byte[] buf = new byte[16384];while ((contagem = is.read(buf)) != -1) {if (contagem > 0) {baos.write(buf, 0, count);}}b = baos.toByteArray();} finalmente {tente {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(Arquivo arquivo) lança 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 ((contagem = in.read(buf)) != -1) {if (contagem > 0) {caw.write(buf, 0, count);}}} finalmente {tente {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(Arquivo arquivo, byte[] dados) lança IOException {OutputStream fos = null;OutputStream os = null;tente {fos = new FileOutputStream(arquivo);os = new BufferedOutputStream(fos);os.write(dados);} finalmente {tente {if ( os != null)os.close();if (fos != null)fos.close();} catch (Exceção e) {System.out.println(e);}}}private static void writeChars(Arquivo, char[] dados) lança IOException {Writer fos = null;Writer os = null;tente {fos = new FileWriter(file);os = new BufferedWriter(fos);os.write(data);} finalmente {tente {if (os != null)os.close();if (fos != null)fos.close();} catch (Exceção e) {e.printStackTrace();}}}// /////////////////////// / ////////////////////////// fim do código de teste.// /////////////////////////////////////////////// ///}
PS: Em relação à tecnologia de criptografia, este site também fornece as seguintes ferramentas de criptografia para sua referência:
Ferramenta de codificação e decodificação BASE64: http://tools.VeVB.COm/transcoding/base64
Ferramenta de criptografia on-line MD5: http://tools.VeVB.COm/password/CreateMD5Password
Ferramenta de criptografia/descriptografia de escape: http://tools.VeVB.COm/password/escapepwd
Ferramenta de criptografia SHA1 online: http://tools.VeVB.COm/password/sha1encode
Ferramenta de geração on-line de link curto (URL curto): http://tools.VeVB.COm/password/dwzcreate
Ferramenta de restauração online de link curto (URL curto): http://tools.VeVB.COm/password/unshorturl
Gerador de senha forte: http://tools.VeVB.COm/password/CreateStrongPassword