السلسلة التي اختبرتها هي رمز مصدر jQuery.
طول النص العادي: 78082
بعد الضغط: 26566
طول التشفير: 54746
إعادة الضغط: 41647
------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------
طول كلمة المرور: 41647
إلغاء الضغط: 54746
بعد فك التشفير: 26566
إعادة الضغط: 78082
------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------
المقارنة بنجاح
DES يتطلب جرة: sun.misc.base64decoder.jar
امتحان
نسخة الكود كما يلي:
الفراغ الثابت العام (سلسلة [] args) يلقي الاستثناء {
سلسلة cont = "" ؛
سلسلة cont2 = jm (yjy (cont)) ؛
if (cont.equals (cont2)) {
System.out.println ("مقارنة النجاح") ؛
}آخر{
System.out.println ("فشل المقارنة") ؛
}
}
السلسلة الثابتة العامة yjy (محتوى السلسلة) ترمي استثناء {
System.out.println ("طول النص العادي:" + cont.length ()) ؛
// الضغط الأول
cont = ziputil2.compress (cont) ؛
System.out.println ("بعد الضغط:" + cont.length ()) ؛
// تشفير المرة الأولى
cont = desutil.encrypt (تابع ، desutil.pwd_key) ؛
system.out.println ("طول التشفير:" + cont.length ()) ؛
// الضغط الثاني
cont = ziputil2.compress (cont) ؛
system.out.println ("recscerbress:" + cont.length ()) ؛
العودة تابع
}
السلسلة الثابتة العامة JM (محتوى السلسلة) يلقي استثناء {
System.out.println ("---------------------------") ؛
System.out.println ("طول ciphertext:" + cont.length ()) ؛
// فك الضغط في المرة الأولى
تابع = ziputil2.uncompress (تابع) ؛
system.out.println ("decompress:" + cont.length ()) ؛
// فك التشفير لأول مرة
cont = desutil.decrypt (cont ، desutil.pwd_key) ؛
System.out.println ("بعد فك التشفير:" + cont.length ()) ؛
// إلغاء الضغط الثاني
تابع = ziputil2.uncompress (تابع) ؛
System.out.println ("reextract:" + cont.length ()) ؛
العودة تابع
}
ديسوتيل
نسخة الكود كما يلي:
استيراد java.io.ioException ؛
استيراد java.security.securerandom ؛
استيراد javax.crypto.cipher ؛
استيراد javax.crypto.secretkeke ؛
استيراد javax.crypto.secretkeyfactory ؛
استيراد javax.crypto.spec.deskeyspec ؛
استيراد decoder.base64decoder ؛
استيراد decoder.base64encoder ؛
الطبقة العامة desutil {
السلسلة الثابتة النهائية الخاصة des = "des" ؛
السلسلة الثابتة النهائية العامة pwd_key = "mzthpwdjm" ؛
السلسلة الثابتة النهائية العامة id_key = "mzthidjm" ؛
الفراغ الثابت العام (سلسلة [] args) يلقي الاستثناء {
string data = "xkajsdasdk'al ؛ ks'dl ؛ kasl ؛ d" ؛
System.err.println ("Encrypt:"+Encrypt (البيانات ، pwd_key)) ؛
System.err.println ("decrypt:" +decrypt (incrypt (data ، pwd_key) ، pwd_key)) ؛
}
/**
* الوصف التشفير بناءً على القيمة الرئيسية
*
* param بيانات
* مفتاح param
* صفيف بايت مفتاح التشفير
* @يعود
* throws استثناء
*/
تشفير السلسلة الثابتة العامة (بيانات السلسلة ، مفتاح السلسلة) استثناء {
byte [] bt = encrypt (data.getBytes () ، key.getBytes ()) ؛
String Strs = new BASE64ENCODER (). ENCODE (BT) ؛
إرجاع Strs.
}
/**
* الوصف يفكرك حسب القيمة الرئيسية
*
* param بيانات
* مفتاح param
* صفيف بايت مفتاح التشفير
* @يعود
* throws ioException
* throws استثناء
*/
السلسلة الثابتة العامة Decrypt (بيانات السلسلة ، مفتاح السلسلة) يلقي IoException ،
استثناء {
إذا (البيانات == فارغة)
العودة لاغية.
BASE64Decoder Decoder = new BASE64DECODER () ؛
byte [] buf = decoder.decodeBuffer (data) ؛
byte [] bt = decrypt (buf ، key.getBytes ()) ؛
إرجاع سلسلة جديدة (BT) ؛
}
/**
* الوصف التشفير بناءً على القيمة الرئيسية
*
* param بيانات
* مفتاح param
* صفيف بايت مفتاح التشفير
* @يعود
* throws استثناء
*/
البايت الثابت الخاص [] encrypt (byte [] data ، byte [] key) يلقي الاستثناء {
// إنشاء مصدر رقم عشوائي موثوق به
SecurerAndom sr = new Securerandom () ؛
// إنشاء كائن deskeyspec من بيانات المفتاح الأصلي
deskeyspec dks = جديد deskeyspec (مفتاح) ؛
// قم بإنشاء مصنع رئيسي واستخدمه لتحويل DeskeySpec إلى كائن SecretKey
secretKeyFactory keyfactory = secretKeyFactory.getInstance (des) ؛
SecretKey SecureKey = keyfactory.generateSecret (DKS) ؛
// كائن الشفرات يكمل بالفعل عملية التشفير
cipher cipher = cipher.getInstance (des) ؛
// تهيئة كائن الشفرات بمفتاح
cipher.init (cipher.encrypt_mode ، securekey ، sr) ؛
إرجاع cipher.dofinal (البيانات) ؛
}
/**
* الوصف يفكرك حسب القيمة الرئيسية
*
* param بيانات
* مفتاح param
* صفيف بايت مفتاح التشفير
* @يعود
* throws استثناء
*/
بايت ثابت خاص [] Decrypt (Byte [] Data ، Byte [] Key) يلقي الاستثناء {
// إنشاء مصدر رقم عشوائي موثوق به
SecurerAndom sr = new Securerandom () ؛
// إنشاء كائن deskeyspec من بيانات المفتاح الأصلي
deskeyspec dks = جديد deskeyspec (مفتاح) ؛
// قم بإنشاء مصنع رئيسي واستخدمه لتحويل DeskeySpec إلى كائن SecretKey
secretKeyFactory keyfactory = secretKeyFactory.getInstance (des) ؛
SecretKey SecureKey = keyfactory.generateSecret (DKS) ؛
// كائن الشفرات يكمل بالفعل عملية فك التشفير
cipher cipher = cipher.getInstance (des) ؛
// تهيئة كائن الشفرات بمفتاح
cipher.init (cipher.decrypt_mode ، SecureKey ، sr) ؛
إرجاع cipher.dofinal (البيانات) ؛
}
}
Ziputil2
.
نسخة الكود كما يلي:
استيراد java.io.bytearrayinputstream ؛
استيراد java.io.bytearrayoutputstream ؛
استيراد java.io.ioException ؛
استيراد java.util.zip.gzipinputStream ؛
استيراد java.util.zip.gzipoutputstream ؛
// ضغط وإلغاء ضغط سلسلة في وضع الرمز البريدي
الفئة العامة Ziputil2 {
// طريقة الاختبار
الفراغ الثابت العام (سلسلة [] args) يلقي ioexception {
// سلسلة الاختبار
سلسلة str = "" ؛
System.out.println ("الطول الأصلي:" + str.length ()) ؛
System.out.println ("بعد الضغط:" + ziputil2.compress (str) .length ()) ؛
System.out
.println ("decompress:" + ziputil2.uncompress (ziputil2.compress (str))) ؛
}
// ضغط
سلسلة ثابتة عامة (سلسلة String Str) يلقي ioException {
if (str == null || str.length () == 0) {
إرجاع شارع
}
bytearrayoutputstream out = new bytearrayoutputstream () ؛
gzipoutputstream gzip = gzipoutputstream جديد (Out) ؛
gzip.write (str.getBytes ()) ؛
gzip.close () ؛
return Out.ToString ("ISO-8859-1") ؛
}
// فك الضغط
السلسلة الثابتة العامة Uncompress (String Str) يلقي IoException {
if (str == null || str.length () == 0) {
إرجاع شارع
}
bytearrayoutputstream out = new bytearrayoutputstream () ؛
bytearrayinputStream في = جديد bytearrayinputstream (
str.getBytes ("ISO-8859-1")) ؛
gzipinputstream gunzip = gzipinputstream جديد (في) ؛
Byte [] Buffer = New Byte [256] ؛
int n ؛
بينما ((n = gunzip.read (buffer))> = 0) {
out.write (المخزن المؤقت ، 0 ، n) ؛
}
// ToString () يستخدم الترميز الافتراضي للنظام الأساسي ، ويمكن أيضًا تحديده بشكل صريح مثل ToString (GBK)
return Out.ToString () ؛
}
}