|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
nazica : 1519 Администратор Откуда: Donetsk, UA
|
Июл 21, 2008 1:21 |
|
|
В случае необходимости шифрования текста алгоритмом типа DES, 3DES и других, можно воспользоваться этим примером:
| Код: |
public class CryptoUtil {
/**
* Алгоритм шифрования. Возможны варианты:
* DES: Digital Encryption Standard
* DESede: Triple DES Encryption
* Blowfish: The block cipher designed by Bruce Schneier
* и другие
*/
private static final String ALGORITHM_KEY = "Blowfish";
/**
* Режим работы алгоритма. Режимов много, например:
* DES/CBC/PKCS5Padding
* DES/PCBC/PKCS5Padding
* DESede/ECB/PKCS5Padding
* DESede/ECB/PKCS5Padding
* Blowfish/CBC/PKCS5Padding
* и много других
*/
private static final String ALGORITHM = "Blowfish/PCBC/PKCS5Padding";
/**
* Параметр инициализации алгоритма шифрования. Значения байтов могут
* быть разными, но одинаковыми для шифрации и дешифрации одних и тех
* же данных
*/
private static final byte[] SALT = new byte[]{
(byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c,
(byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99};
/**
* Кодирование заданного текста алгоритмом ALGORITHM с использованием
* сгенерированного ключа
*
* @param cleartext текст для шифрования
* @param key ключ, используемый при шифровании
* @return байтовый массив
* @see CryptoUtil#generateKey
*/
public static byte[] encode(String cleartext, Key key) {
try {
return crypt(cleartext.getBytes("UTF-8"), key, Cipher.ENCRYPT_MODE);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
/**
* Метод для дешифрования текста.
*
* @param ciphertext зашифрованный текст в виде байтового массива
* @param key ключ, использованный при шифровании текста
* @return дешифрованный текст
* @see CryptoUtil#generateKey
*/
public static String decode(byte[] ciphertext, Key key) {
try {
return new String(crypt(ciphertext, key, Cipher.DECRYPT_MODE), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
/**
* Метод генерации ключа, используемого в алгоритме шифрования
*
* @return ключ для шифрования
*/
private static SecretKey generateKey() {
try {
return KeyGenerator.getInstance(ALGORITHM_KEY).generateKey();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
/**
* Метод шифрования/дешифрования текста в зависимости от параметра mode
*
* @param input входной байтовый массив для шифрования
* @param key секретный ключ, используемый при шифровании
* @param mode режим работы алгоритма (шифрование/дешифрование)
* @return зашифрованный или дешифрованный текст в виде байтового массива
*/
private static byte[] crypt(byte[] input, Key key, int mode) {
IvParameterSpec iv = new IvParameterSpec(SALT);
Cipher c;
try {
c = Cipher.getInstance(ALGORITHM);
c.init(mode, key, iv);
return c.doFinal(input);
} catch (Exception e) {
// вообще-то может возникать несколько типов исключений и их нужно
// обрабатывать соотв. образом. Но в примере это не важно
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws Exception {
// строка UTF-текста
String data = "¡некоторые данные in different símbolos!";
Key key = generateKey();
byte[] encode = CryptoUtil.encode(data, key);
System.out.println("encode>" + new String(encode, "UTF-8"));
String decode = CryptoUtil.decode(encode, key);
System.out.println("decode>" + decode);
}
} |
_________________ Software and cathedrals are much the same - first we build them, then we pray |
|
|
|
 |
preved : 476 Java Developer Откуда: Internet
|
Мар 17, 2009 14:02 |
|
|
Нужно в начале добавить такой список импортов:
| Код: |
import java.io.UnsupportedEncodingException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
|
|
|
|
|
 |
preved : 476 Java Developer Откуда: Internet
|
Мар 17, 2009 16:29 |
|
|
В примере, как я понял, ключ каждый раз генерирется новый.
| Цитата: |
| Код: |
private static SecretKey generateKey() {
try {
return KeyGenerator.getInstance(ALGORITHM_KEY).generateKey();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
|
|
А каким образом сохранить ключ, чтобы потом его можно было восстановить? |
|
|
|
 |
|
|
Страница 1 из 1
|
Список форумов
-> Примеры |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|