Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SecretKeySpec как свой сгенерировать? 
V
    Опции темы
Muerto
Дата 3.9.2011, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: нет
Всего: 4



Здравствуйте... Хочу хешировать пароли в проге...

есть такой класс

Код

import java.security.InvalidKeyException;
import java.security.Key;
import java.security.MessageDigest;
import java.util.Arrays;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.spec.SecretKeySpec;
     
     
public class EncryptAndDecrypt {
     
    private static String algorithm = "DESede";
    private static Key key = null;
    private static Cipher cipher = null;
    private static EncryptAndDecrypt obj = new EncryptAndDecrypt();
     
    private EncryptAndDecrypt() {
        try {
            //key = KeyGenerator.getInstance(algorithm).generateKey();
         /*
         byte[] tsu = ("testdfghdfghdfghdfghdfghGHDF").getBytes("UTF-8");
         MessageDigest sha = MessageDigest.getInstance("SHA-1");
         keyTemp = sha.digest(keyTemp);
         keyTemp = Arrays.copyOf(keyTemp, 16); // use only first 128 bit
            */
         byte[] raw = {'4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4','4'};
         key = new javax.crypto.spec.SecretKeySpec(raw, "AES");


            cipher = Cipher.getInstance(algorithm);
        } catch (Exception e) {
         
        }
    }
     
    public static EncryptAndDecrypt getInstance() {
     return obj;
    }
     
    public static byte[] encrypt(String input) throws InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] inputBytes = input.getBytes();
        return cipher.doFinal(inputBytes);
    }
    /**
     * 
     * @param input
     * @return
     * @throws InvalidKeyException
     * @throws BadPaddingException
     * @throws IllegalBlockSizeException
     */
    public static String getEncryptStringValue(String input) throws InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
     return new String(encrypt(input));
    }
     
    /**
     * 
     * @param encryptionBytes
     * @return
     * @throws InvalidKeyException
     * @throws BadPaddingException
     * @throws IllegalBlockSizeException
     */
    public static String decrypt(byte[] encryptionBytes) throws InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] recoveredBytes =
        cipher.doFinal(encryptionBytes);
        String recovered =
        new String(recoveredBytes);
        return recovered;
    }
    /**
     * 
     * @param encryptionBytes
     * @return
     * @throws InvalidKeyException
     * @throws BadPaddingException
     * @throws IllegalBlockSizeException
     */
    public static String decrypt(String encryptionBytes) throws InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
     return EncryptAndDecrypt.decrypt(encryptionBytes.getBytes());
    }
    
}


Если так делать
Код


 key = KeyGenerator.getInstance(algorithm).generateKey();


То пашет... но каждый раз новый ключ... а я данные в базу пишу толку конечно же нету...

Хотел свой задать... но не могу понять как это делать... строю методом тыка  smile 

Не подскажите как свой ключ сгенерировать?

А то сейчас получаю ошибку

Код

Exception in thread "main" java.security.InvalidKeyException: Invalid key length: 32 bytes
    at com.sun.crypto.provider.DESedeCipher.engineGetKeySize(DashoA13*..)
    at javax.crypto.Cipher.b(DashoA13*..)
    at javax.crypto.Cipher.a(DashoA13*..)
    at javax.crypto.Cipher.a(DashoA13*..)
    at javax.crypto.Cipher.a(DashoA13*..)
    at javax.crypto.Cipher.init(DashoA13*..)
    at javax.crypto.Cipher.init(DashoA13*..)
    at EncryptAndDecrypt.encrypt(EncryptAndDecrypt.java:43)
    at Main.encrypt(Main.java:195)
    at Main.main(Main.java:47)


Не могу понять какой длинны он ключ хочет  smile 

Это сообщение отредактировал(а) Muerto - 3.9.2011, 12:42


--------------------
user posted image
PM MAIL   Вверх
Muerto
Дата 3.9.2011, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: нет
Всего: 4



Вопрос решен, длина должна быть 24 похоже...


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0417 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.