1. تشفير وفك تشفير DES
الحزمة 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 و فك التشفير. * * @author Song Lijun* @date 3 يوليو، 2014*/public class DESUtil {/** مفتاح الأمان*/private String keyData = "ABCDEFGHIJKLMNOPQRSTWXYZabcdefghijklmnopqrstwxyz0123456789-_.";/** * الوظيفة: البناء* * @author Song Lijun * @تاريخ 3 يوليو، 2014 */public DESUtil() {}/** * الوظيفة: البناء* * @author Song Lijun* @date 3 يوليو، 2014* @param keyData * key */public DESUtil(String key) { this.keyData = key;}/** * الوظيفة: التشفير (UTF-8) * * @author Song Lijun* @تاريخ 3 يوليو، 2014* @param source * سلسلة المصدر * @param charSet * التشفير * @return String * @throws UnsupportedEncodingException * استثناء الترميز */public String encrypt(String source) throws UnsupportedEncodingException {return encrypt(source, "UTF-8");}/ * * * * الوظيفة: فك التشفير (UTF-8) * * @author Song Lijun* @تاريخ 3 يوليو، 2014* @param encryptedData * سلسلة مشفرة * @return String * @throws UnsupportedEncodingException * استثناء التشفير */public String decrypt(String encryptedData)throws UnsupportedEncodingException {return decrypt(encryptedData, "UTF-8");}/** * الوظيفة: التشفير* *@author Song Lijun* @تاريخ 3 يوليو، 2014* @مصدرparam * سلسلة المصدر * @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 * @ تاريخ 3 يوليو، 2014 * @param encryptedData * سلسلة مشفرة * @param charSet * التشفير * @return String * @throws UnsupportedEncodingException * استثناء التشفير */public String decrypt(String encryptedData ، سلسلة charSet) تطرح UnsupportedEncodingException {String descryptedData = null;byte[] ret = descrypt(Base64.decode(encryptedData.toCharArray()));descryptedData = new String(ret, charSet);return descryptedData;}/** * تستخدم البيانات المشفرة المفتاح الذي تم إنشاؤه لتشفير البيانات الأصلية * * @param PrimaryData * البيانات الأصلية * @return byte[] * @author Song Lijun* @تاريخ 3 يوليو، 2014*/خاص 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;try {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")؛} قبض على (NoSuchAlgorithmException e) {e.printStackTrace();} قبض على (NoSuchPaddingException e) {e.printStackTrace();}/** تهيئة كائن التشفير باستخدام المفتاح*/try {cipher.init(Cipher.ENCRYPT_MODE, key, sr);} Catch (InvalidKeyException e) {e.printStackTrace();}/* * إجراء عملية التشفير رسميًا*/byte encryptedData[] = null;حاول {encryptedData = cipher.doFinal(primaryData);} Catch (IllegalStateException e) {e.printStackTrace();} Catch (IllegalBlockSizeException e) {e.printStackTrace();} Catch (BadPaddingException e) {e.printStackTrace();}/** إرجاع البيانات المشفرة*/return encryptedData;} /** * فك تشفير البيانات باستخدام المفتاح* * @param encryptedData * البيانات المشفرة * @return byte[] * @author Song Lijun* @تاريخ 3 يوليو، 2014*/private byte[] descrypt(byte[] encryptedData) {/** تتطلب خوارزمية 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;try {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();}/** تهيئة كائن التشفير باستخدام المفتاح*/try {cipher.init(Cipher.DECRYPT_MODE, key, sr);} Catch (InvalidKeyException e) {e.printStackTrace();}/** التنفيذ الرسمي لعملية فك التشفير*/byte decryptedData[] = null;try {decryptedData = cipher.doFinal(encryptedData);} قبض (IllegalStateException e) {e.printStackTrace();} قبض (IllegalBlockSizeException e) {e.printStackTrace();} قبض (BadPaddingException e) {e.printStackTrace();} إرجاع البيانات المشفرة؛}/** * هذه الطريقة للحصول على مفتاح الأمان غير صالحة لأنه في كل مرة يتم فيها إنشاء المفتاح، يختلف المفتاح المستخدم لفك التشفير والتشفير، مما يؤدي إلى الخطأ. نظرًا لأن الكتلة النهائية غير مبطنة بشكل صحيح * * @return byte array* @author Song Lijun* @ date يوليو 3, 2014*/private byte[] getKey() {/** تتطلب خوارزمية DES مصدر رقم عشوائي موثوق به*/SecureRandom sr = new SecureRandom();/** قم بإنشاء كائن مولد رئيسي لخوارزمية DES التي نختارها */KeyGeneratorkg = null;try {kg = KeyGenerator.getInstance("DES");} Catch (NoSuchAlgorithmException e) {e.printStackTrace();}kg.init ( sr);/** إنشاء فئة أداة رئيسية*/SecretKey key =kg.generateKey();/** إنشاء مصفوفة بايت رئيسية*/byte RawKeyData[] = key.getEncoded();return RawKeyData;}}
2. التشفير وفك التشفير Base64
package com.itjh.javaUtil;import java.io.*;/** * تشفير وفك تشفير Base64. * * @author Song Lijun* @تاريخ 3 يوليو، 2014*/public class Base64 {public Base64() {}/** * الوظيفة: سلسلة مشفرة* * @author Song Lijun* @تاريخ 3 يوليو، 2014* @param data * سلسلة المصدر * @return String */public static String encode(String data) {return new String(encode(data.getBytes()));}/** * الوظيفة: فك تشفير السلسلة * * @author Song Lijun * @ تاريخ 3 يوليو 2014 * @param data * سلسلة المصدر * @return String */public static String decode(String data) {return new String(decode(data .toCharArray( )));}/** * الوظيفة: تشفير البايت[] * * @author Song Lijun* @تاريخ 3 يوليو، 2014* @param data * المصدر* @return char[] */public static char[] encode(byte[] data) {char[] out = new char[((data.length + 2) / 3) * 4];for (int i = 0, مؤشر = 0 < data. length؛ i += 3، مؤشر += 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] = الأبجدية[(رحلة ? (val & 0x3F) : 64)];val >>= 6;out[index + 1] = الأبجدية[val & 0x3F ];val >>= 6;out[index + 0] = Alphabet[val & 0x3F];}return out;}/** * الوظيفة: فك التشفير* * @author Song Lijun* @تاريخ 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 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; // # البتات الزائدة المخزنة في تراكم accum = 0; // مؤشر البت الزائد = 0;// نمر الآن عبر المصفوفة بأكملها (لا نستخدم قيمة 'tempLen') for (int ix = 0; ix < data. length; ix++) {int value = (data[ix] > 255) ? -1 : codes[data[ix]];if (value >= 0) { // تخطي ما هو غير مشفر <<= 6; // يتم إزاحة البتات بمقدار 6 في كل مرة يتم فيها التحويل += 6; // حلقة، مع وضع البتات الجديدة في مكانها |= القيمة؛ اكتبها (من الجزء العلوي، مع ترك Anyout[index++] = // الزائد في الأسفل للتكرار التالي.(بايت) ((accum >> Shift) & 0xff)؛}}}// إذا كان لا يزال هناك شيء خاطئ، علينا فقط التخلص منه الآن!if (index!= out.length) {throw new Error("طول البيانات المحسوب بشكل خاطئ (كتب " + فهرس+ " بدلاً من " + out.length + ")");}return out;}/** * الوظيفة: تشفير الملف* * @author Song Lijun* @date 3 يوليو 2014* @param file * ملف المصدر*/public static void encode(File file) throws IOException {if (!file.exists()) {System.out (0);}else {byte[] decoded = readBytes(file);char[] encoded = encode(decoded);writeChars(file, encoded);}file = null;}/** * الوظيفة: فك تشفير الملفات. * * @author Song Lijun* @date 3 يوليو 2014* @param file * الملف المصدر* @throws IOException */public static void decode(File file) throws IOException {if (!file.exists()) {System.out (0);} else {char[] encoded = readChars(file);byte[] decoded = decode(encoded);writeBytes(file, decoded);}file = null;}//// أحرف الكود للقيم 0..63//private static char[]Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();//// جدول بحث للتحويل أحرف base64 للقيمة في النطاق 0..63 // أكواد البايت الثابتة الخاصة [] = بايت جديد [256]؛ ثابت {for (int i = 0; i < 256; i++) {codes[i] = -1;// LoggerUtil.debug(i + "&" + codes[i] + " ");} for (int i = 'A'; i <= 'Z'; i++) {codes[i] = (بايت) (i - 'A');// LoggerUtil.debug(i + "&" + codes[i] + " ");}for (int i = 'a'; i <= 'z'; i++) {codes[i] = (بايت) (26 + i - 'a')؛// LoggerUtil.debug(i + "&" + codes[i] + " ");}for (int i = '0'; i <= '9 ';ط++) {codes[i] = (byte) (52 + i - '0');// LoggerUtil.debug(i + "&" + codes[i] + " ");}codes['+'] = 62; الأكواد['/'] = 63;} بايت ثابت خاص[] readBytes(ملف ملف) يطرح IOException {ByteArrayOutputStream baos = جديد ByteArrayOutputStream();byte[] b = null;InputStream fis = null;InputStream = null;try {fis = new FileInputStream(file);is = new BufferedInputStream(fis);int count = 0;byte[] buf = جديد بايت [16384]؛ while ((count = is.read(buf)) != -1) {if (count > 0) {baos.write(buf, 0, count);}}b = baos.toByteArray();} أخيرًا {حاول {if (fis != null)fis.إغلاق();if (is != null)is.إغلاق ();if (baos != null)baos.إغلاق();} Catch (استثناء e) {System.out.println(e);}}return b;}حرف ثابت خاص[] readChars (ملف ملف) يطرح 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);}}} أخيرًا {حاول {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();} writeBytes باطلة ثابتة خاصة (ملف ملف، بايت [] البيانات) يلقي IOException {OutputStream fos = null;OutputStream os = null;try {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);}}} writeChars باطل ثابت خاص (ملف ملف، بيانات char[]) يلقي IOException {Writer fos = null;Writer os = null;try {fos = new FileWriter(file);os = new BufferedWriter(fos);os.write(data);} أخيرًا {حاول {if (os != null)os. Close();if (fos != null)fos.إغلاق();} Catch (استثناء e) {e.printStackTrace();}}}// ////////////////// / ///////////////////// نهاية كود الاختبار.// ////////////////////////////////////////////////////////////////// ///
ملاحظة: فيما يتعلق بتقنية التشفير، يوفر هذا الموقع أيضًا أدوات التشفير التالية كمرجع لك:
أداة التشفير وفك التشفير BASE64: http://tools.VeVB.COm/transcoding/base64
أداة التشفير عبر الإنترنت MD5: http://tools.VeVB.COm/password/CreateMD5Password
أداة تشفير/فك تشفير الهروب: 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