Строка, которую я протестировал, была исходным кодом jQuery.
Простой длина текста: 78082
После сжатия: 26566
Длина шифрования: 54746
Реконструкция: 41647
------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------
Длина пароля: 41647
Декомпрессия: 54746
После дешифрования: 26566
Повторная экспрессия: 78082
------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------
Сравнение успешно
DES требует JAR: sun.misc.base64decoder.jar
Тест
Кода -копия выглядит следующим образом:
public static void main (string [] args) бросает исключение {
String cont = "";
String cont2 = jm (yjy (продолжение));
if (cont.equals (cont2)) {
System.out.println («Сравнение успешно»);
}еще{
System.out.println («Сравнение не удалось»);
}
}
public Static String yjy (String Content) бросает исключение {
System.out.println ("Длина открытого текста:" + cont.length ());
// Первое сжатие
продолжение = Ziputil2.compress (продолжение);
System.out.println ("После сжатия:" + cont.length ());
// Первое шифрование
cont = desutil.encrypt (продолжение, desutil.pwd_key);
System.out.println ("Длина шифрования:" + cont.length ());
// Второе сжатие
продолжение = Ziputil2.compress (продолжение);
System.out.println ("Recress:" + cont.length ());
Возврат продолжение;
}
public Static String JM (String Content) Throws Exception {
System.out.println ("-----------------------------");
System.out.println ("Длина зашифрованного текста:" + cont.length ());
// распаковывать в первый раз
продолжение = Ziputil2.uncompr (продолжение);
System.out.println ("decompress:" + cont.length ());
// расшифровывать впервые
cont = desutil.decrypt (продолжение, desutil.pwd_key);
System.out.println ("После расшифровки:" + cont.length ());
// вторая декомпрессия
продолжение = Ziputil2.uncompr (продолжение);
System.out.println ("Re-extract:" + cont.length ());
Возврат продолжение;
}
Пропутать
Кода -копия выглядит следующим образом:
импортировать java.io.ioexception;
Импорт java.security.securerandom;
Импорт javax.crypto.cipher;
Импорт javax.crypto.secretkey;
импортировать javax.crypto.secretkeyfactory;
импортировать javax.crypto.spec.deskeyspec;
Импорт декодер.base64decoder;
Импорт декодер.base64encoder;
открытый класс DeSutil {
частная конечная статическая строка des = "des";
публичная окончательная статическая строка pwd_key = "mzthpwdjm";
публичная окончательная статическая строка id_key = "mzthidjm";
public static void main (string [] args) бросает исключение {
String data = "xkajsdasdk'al; ks'dl; kasl; d";
System.err.println ("Encrypt:"+Encrypt (data, pwd_key));
System.err.println ("decrypt:" +decrypt (encrypt (data, pwd_key), pwd_key));
}
/**
* Описание шифрование на основе значения ключа
*
* @param данные
* @param Key
* Массив байтова шифрования
* @возвращаться
* @ThrohS Exception
*/
Общественная статическая строка Encrypt (String Data, String Key) Throws Exception {
byte [] bt = incrypt (data.getbytes (), key.getbytes ());
String strs = new Base64encoder (). Encode (bt);
вернуть Strs;
}
/**
* Описание расшифровывает в соответствии со значением ключа
*
* @param данные
* @param Key
* Массив байтова шифрования
* @возвращаться
* @Throws ioException
* @ThrohS Exception
*/
Общедоступная статическая строка дешифтирует (строковые данные, ключ строки) бросает ioException,
Исключение {
if (data == null)
вернуть ноль;
Base64decoder декодер = new Base64decoder ();
byte [] buf = decoder.decodebuffer (data);
byte [] bt = decrypt (buf, key.getbytes ());
вернуть новую строку (bt);
}
/**
* Описание шифрование на основе значения ключа
*
* @param данные
* @param Key
* Массив байтова шифрования
* @возвращаться
* @ThrohS Exception
*/
Частный статический байт [] Encrypt (byte [] data, byte [] key) бросает исключение {
// генерировать доверенный источник случайных чисел
Securerandom sr = new Securerandom ();
// Создать объект DeskeySpec из исходных данных ключей
Deskeyspec dks = new deskeyspec (key);
// Создать ключевую фабрику и использовать ее для преобразования DeskeySpec в объект SecretKey
SecretKeyFactory KeyFactory = secretKeyFactory.getInstance (des);
SecretKey SecureKey = keyFactory.GenerateCret (DKS);
// объект Cipher фактически завершает операцию шифрования
Шифр Cipher = cipher.getInstance (des);
// Инициализировать объект шифра с помощью ключа
cipher.init (cipher.encrypt_mode, secureKey, sr);
return cipher.dofinal (data);
}
/**
* Описание расшифровывает в соответствии со значением ключа
*
* @param данные
* @param Key
* Массив байтова шифрования
* @возвращаться
* @ThrohS Exception
*/
Частный статический байт [] расшифровывает (byte [] data, byte [] key) бросает исключение {
// генерировать доверенный источник случайных чисел
Securerandom sr = new Securerandom ();
// Создать объект DeskeySpec из исходных данных ключей
Deskeyspec dks = new deskeyspec (key);
// Создать ключевую фабрику и использовать ее для преобразования DeskeySpec в объект SecretKey
SecretKeyFactory KeyFactory = secretKeyFactory.getInstance (des);
SecretKey SecureKey = keyFactory.GenerateCret (DKS);
// объект Cipher фактически завершает операцию расшифровки
Шифр Cipher = cipher.getInstance (des);
// Инициализировать объект шифра с помощью ключа
cipher.init (cipher.decrypt_mode, secureKey, sr);
return cipher.dofinal (data);
}
}
Ziputil2
Полем
Кода -копия выглядит следующим образом:
импортировать java.io.bytearrayinputstream;
импортировать java.io.bytearrayoutputstream;
импортировать java.io.ioexception;
импортировать java.util.zip.gzipinputstream;
импортировать java.util.zip.gzipoutputstream;
// Сжатие и распаковка строки в режиме zip
открытый класс Ziputil2 {
// метод испытания
public static void main (string [] args) бросает ioException {
// тестовая строка
String str = "";
System.out.println ("исходная длина:" + str.length ());
System.out.println ("После сжатия:" + Ziputil2.compress (str) .length ());
System.out
.println ("decompress:" + ziputil2.uncpress (ziputil2.compress (str)));
}
// сжатие
Public Static String Compress (String Str) бросает ioException {
if (str == null || str.length () == 0) {
вернуть Str;
}
BytearRayOutputStream OUT = New BytearRayOutputStream ();
Gzipoutputstream gzip = new gzipoutputstream (out);
gzip.write (str.getbytes ());
gzip.close ();
return Out.toString ("iso-8859-1");
}
// распаковка
публичная статическая строка бессвязная (String Str) бросает ioException {
if (str == null || str.length () == 0) {
вернуть Str;
}
BytearRayOutputStream OUT = New BytearRayOutputStream ();
BytearrayinputStream in = new BytearrayinputStream (
str.getbytes ("iso-8859-1"));
Gzipinputstream unzip = new gzipinputstream (in);
Byte [] buffer = новый байт [256];
int n;
while ((n = gunzip.read (buffer))> = 0) {
out.write (buffer, 0, n);
}
// toString () использует кодирование платформы по умолчанию, а также может быть явно указано, например, ToString (GBK)
вернуть. ToString ();
}
}