Обычная версия
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
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
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
Список форумов
 -> Примеры


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru