1. Cryptage et décryptage DES
package com.itjh.javaUtil; importer java.io.UnsupportedEncodingException; importer java.security.InvalidKeyException; importer java.security.NoSuchAlgorithmException; importer java.security.SecureRandom; importer java.security.spec.InvalidKeySpecException; importer javax.crypto.BadPaddingException ;importer javax.crypto.Cipher;importer javax.crypto.IllegalBlockSizeException; importer javax.crypto.KeyGenerator; importer javax.crypto.NoSuchPaddingException; importer javax.crypto.SecretKey; importer javax.crypto.SecretKeyFactory; importer javax.crypto.spec.DESKeySpec;/** * Chiffrement DES et Décrypter. * * @author Song Lijun* @date 3 juillet 2014*/public class DESUtil {/** Clé de sécurité*/private String keyData = "ABCDEFGHIJKLMNOPQRSTWXYZabcdefghijklmnopqrstwxyz0123456789-_.";/** * Fonction : Construction* * @author Song Lijun * @date 3 juillet 2014 */public DESUtil() {}/** * Fonction : Construction* * @author Song Lijun* @date 3 juillet 2014* @param keyData * key */public DESUtil(String key) { this.keyData = key;}/** * Fonction : Cryptage (UTF-8) * * @author Song Lijun* @date 3 juillet 2014* @param source * Chaîne source * @param charSet * Encodage * @return String * @throws UnsupportedEncodingException * Exception d'encodage */public String encrypt(String source) throws UnsupportedEncodingException {return encrypt(source, "UTF-8");}/ * * * * Fonction : Décryptage (UTF-8) * * @auteur Song Lijun* @date 3 juillet 2014* @param selectedData * Chaîne chiffrée * @return String * @throws UnsupportedEncodingException * Exception d'encodage */public String decrypt(String selectedData)throws UnsupportedEncodingException {return decrypt(encryptedData, "UTF-8");}/** * Fonction : Chiffrement* * @auteur Song Lijun* @date 3 juillet 2014* @param source * Chaîne source * @param charSet * Encodage * @return String * @throws UnsupportedEncodingException * Exception d'encodage */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;}/** * * Fonction : Décryptage * * @author Song Lijun * @date 3 juillet 2014 * @param selectedData * Chaîne cryptée * @param charSet * Encodage * @return String * @throws UnsupportedEncodingException * Exception d'encodage */public String decrypt(String selectedData , String charSet) lance UnsupportedEncodingException {String descryptedData = null;byte[] ret = descrypt(Base64.decode(encryptedData.toCharArray()));descryptedData = new String(ret, charSet);return descryptedData;}/** * Les données chiffrées utilisent la clé générée pour chiffrer les données d'origine * * @param PrimaryData * Données originales * @return byte[] * @author Song Lijun* @date 3 juillet 2014*/privé byte[] encrypt(byte[] PrimaryData) {/** Obtenez la clé de sécurité*/byte rawKeyData[] = getKey();/** L'algorithme DES nécessite une source de nombres aléatoires fiable*/SecureRandom sr = new SecureRandom () ;/** Créez un objet DESKeySpec en utilisant les données de clé d'origine*/DESKeySpec dks = null;try {dks = new DESKeySpec(keyData.getBytes());} catch (InvalidKeyException e) {e.printStackTrace();}/** Créer une fabrique de clés*/SecretKeyFactory keyFactory = null;try {keyFactory = SecretKeyFactory.getInstance("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace ( );}/** Utilisez la fabrique de clés pour convertir DESKeySpec en un objet SecretKey*/SecretKey key = null;try {key = keyFactory.generateSecret(dks);} catch (InvalidKeySpecException e) {e.printStackTrace();}/** L'objet Cipher termine réellement l'opération de chiffrement*/Cipher cipher = null;try {cipher = Cipher .getInstance ("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();}/** Initialiser l'objet Cipher avec la clé*/try {cipher.init(Cipher.ENCRYPT_MODE, key, sr);} catch (InvalidKeyException e) {e.printStackTrace();}/* * Effectuer formellement une opération de chiffrement*/byte selectedData[] = null;try {encryptedData = cipher.doFinal(primaryData);} catch (IllegalStateException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();}/** Renvoyer les données chiffrées*/return approvedData;} /** * Déchiffrer les données avec la clé* * @param approvedData * Données cryptées * @return byte[] * @author Song Lijun* @date 3 juillet 2014*/private byte[] descrypt(byte[] selectedData) {/** L'algorithme DES nécessite une source de nombres aléatoires fiable*/SecureRandom sr = new SecureRandom();/* * Obtenez le clé de sécurité */byte rawKeyData[] = getKey();/** Créer un objet DESKeySpec en utilisant les données de clé brutes */DESKeySpec dks = null try; {dks = new DESKeySpec(keyData.getBytes());} catch (InvalidKeyException e) {e.printStackTrace();}/** Créer une fabrique de clés*/SecretKeyFactory keyFactory = null;try {keyFactory = SecretKeyFactory.getInstance( " DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}/** Utilisez la fabrique de clés pour convertir DESKeySpec en un objet SecretKey */SecretKey key = null;try {key = keyFactory.generateSecret(dks);} catch (InvalidKeySpecException e) {e.printStackTrace();}/** L'objet Cipher est en fait Opération de chiffrement terminée*/Cipher cipher = null;try {cipher = Cipher.getInstance("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();}/** Initialiser l'objet Cipher avec la clé*/try {cipher.init(Cipher.DECRYPT_MODE, key, sr);} catch (InvalidKeyException e) {e.printStackTrace();}/** Exécution formelle de l'opération de décryptage*/octet decryptedData[] = null;try {decryptedData = cipher.doFinal(encryptedData);} catch (IllegalStateException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} retourner les données décryptées ;}/** * Cette méthode d'obtention de la clé de sécurité n'est pas valide car à chaque fois que la clé est générée, la clé utilisée pour le déchiffrement et le cryptage est différente, ce qui conduit à l'erreur Étant donné que le bloc final n'est pas * correctement rempli, * * @return byte array* @author Song. Lijun* @ date 3 juillet 2014*/private byte[] getKey() {/** L'algorithme DES nécessite une source de nombres aléatoires fiable*/SecureRandom sr = new SecureRandom();/** Générer un objet générateur de clé pour l'algorithme DES de notre choix */KeyGenerator kg = null;try {kg = KeyGenerator.getInstance("DES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}kg.init ( sr);/** Générer une classe d'outils de clé*/SecretKey key = kg.generateKey();/** Générer un tableau d'octets de clé*/byte rawKeyData[] = key.getEncoded();return rawKeyData;}}
2. Cryptage et décryptage Base64
package com.itjh.javaUtil;import java.io.*;/** * Encodage et décodage Base64. * * @author Song Lijun* @date 3 juillet 2014*/public class Base64 {public Base64() {}/** * Fonction : chaîne codée* * @author Song Lijun* @date 3 juillet 2014* @param data * Chaîne source* @return String */public static String encode(String data) {return new String(encode(data.getBytes()));}/** * Fonction : décoder la chaîne* * @author Song Lijun* @date 3 juillet 2014* @param data * chaîne source* @return String */public static String decode(String data) {return new String(decode(data .toCharArray( )));}/** * Fonction : octet de codage[] * * @author Song Lijun* @date 3 juillet 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;}/** * Fonction : décodage* * @author Song Lijun* @date 3 juillet 2014* @param data * Tableau de caractères codés* @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 les caractères et le remplissage non valides}}// calcule la longueur requise:// -- 3 octets pour chaque 4 caractères base64 valides// -- plus 2 octets s'il y a 3 caractères base64 supplémentaires,/ / ou plus 1 octet s'il y en a 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 en excès stockés dans accumint accum = 0; // excès de bitsint index = 0;// nous parcourons maintenant tout le tableau (N'utilisez PAS la valeur 'tempLen') pour (int ix = 0; ix < data.length; ix++) {int value = (data[ix] > 255) ? -1 : codes[data[ix]];if (value >= 0) { // ignore les non-codeaccum <<= 6; // les bits sont décalés de 6 à chaque changement de vitesse += 6; // boucle, avec de nouveaux bits placés inaccum |= value; // en bas.if (shift >= 8) { // chaque fois qu'il y en a 8 ou plus,shift -= 8; écrivez-les (à partir de en haut, laissant anyout[index++] = // excès en bas pour la prochaine itération. (byte) ((accum >> shift) & 0xff);}}}// s'il y a TOUJOURS un problème, quelque chose ne nous suffit pas now!if (index != out.length) {throw new Error("Longueur des données mal calculée (écrit " + index+ " au lieu de " + out.length + ")");}return out;}/** * Fonction : Encoder le fichier* * @author Song Lijun* @date 3 juillet 2014* @param file * Fichier source*/public static void encode(File file) throws IOException {if (!file.exists()) {System. (0);}else {byte[] decoded = readBytes(file);char[] encoded = encode(decoded);writeChars(file, encoded);}file = null;}/** * Fonction : décoder les fichiers. * * @author Song Lijun* @date 3 juillet 2014* @param file * Fichier source* @throws IOException */public static void decode(File file) throws IOException {if (!file.exists()) {Sortie du système. (0);} else {char[] encodé = readChars(fichier);byte[] decoded = decode(encoded);writeBytes(fichier, decoded);}file = null;}//// caractères de code pour les valeurs 0..63//private static char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();//// table de recherche pour la conversion caractères base64 à valeur dans la plage 0..63//codes d'octet statique privé[] = nouvel octet[256];statique {pour (int i = 0; i < 256; i++) {codes[i] = -1;// LoggerUtil.debug(i + "&" + codes[i] + " ");}pour (int i = 'A'; i <= 'Z'; i++) {codes[i] = (octet) (i - 'A');// LoggerUtil.debug(i + "&" + codes[i] + " ");}for (int i = 'a'; i <= 'z'; i++) {codes[i] = (octet) (26 + i - 'a');// LoggerUtil.debug(i + "&" + codes[i] + " ");}for (int i = '0'; i <= '9 ';je++) {codes[i] = (octet) (52 + i - '0');// LoggerUtil.debug(i + "&" + codes[i] + " ");}codes['+'] = 62; codes['/'] = 63;}octet statique privé[] readBytes (fichier fichier) lance 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 octet[16384];while ((count = is.read(buf)) != -1) {if (count > 0) {baos.write(buf, 0, count);}}b = baos.toByteArray();} enfin {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;}caractère statique privé[] readChars (fichier fichier) lance 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);}}} enfin {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(Fichier fichier, byte[] data) lance IOException {OutputStream fos = null;OutputStream os = null;try {fos = new FileOutputStream(file);os = new BufferedOutputStream(fos);os.write(data);} enfin {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) lance IOException {Writer fos = null;Writer os = null;try {fos = new FileWriter(file);os = new BufferedWriter(fos);os.write(data);} enfin {try {if (os != null)os.close();if (fos != null)fos.close();} catch (Exception e) {e.printStackTrace();}}}// /////////////////////// / //////////////////////////// fin du code de test.// /////////////////////////////////////////////// ///}
PS : Concernant la technologie de cryptage, ce site fournit également les outils de cryptage suivants pour votre référence :
Outil d'encodage et de décodage BASE64 : http://tools.VeVB.COm/transcoding/base64
Outil de chiffrement en ligne MD5 : http://tools.VeVB.COm/password/CreateMD5Password
Outil de cryptage/déchiffrement d'échappement : http://tools.VeVB.COm/password/escapepwd
Outil de chiffrement SHA1 en ligne : http://tools.VeVB.COm/password/sha1encode
Outil de génération en ligne de liens courts (URL courtes) : http://tools.VeVB.COm/password/dwzcreate
Outil de restauration en ligne de liens courts (URL courtes) : http://tools.VeVB.COm/password/unshorturl
Générateur de mots de passe forts : http://tools.VeVB.COm/password/CreateStrongPassword