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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Password crypting 
:(
    Опции темы
rrrookie
Дата 27.7.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 21.6.2006
Где: Rīga

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



Привет!

Как в Java лучше криптовать пароли при логине?

Ест несколько стандаров для криптования: MD-5
 http://tools.arlut.utexas.edu/gash2/doc/ja...5/MD5Crypt.html 
SHA-1- 
http://www.superwaba.org/doc/superwaba/ext...rypto/SHA1.html 
SHA-160 - 
http://www.gnu.org/software/gnu-crypto/man...ash/Sha160.html

Которий из них лучше?

Например попробую закриптовать пароль в SHA-1 ->

Код

String password = new String("password");
SHA1 passSha1 = new SHA1();

byte[] passwordByte;

passSha1.flush();
passwordByte = passSha1.getBytes(password);
passSha1.finnalize();

passwordByte = passSha1.getDigest();




После выполнения етого кода байты с криптованным паролем хранятся в passwordByte

Правильно?

Добавлено @ 14:31 
И где можно найти  jar'ы с упомянутыми классами?

Спасибоо!  
PM MAIL   Вверх
tux
Дата 27.7.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Цитата(rrrookie @  27.7.2006,  19:28 Найти цитируемый пост)
И где можно найти  jar'ы с упомянутыми классами?

А где ты нашел эти классы? smile Вроде в JRE нет никаких SHA1. 

Вообще результат удобнее представлять в виде строки. Вот пример для MD5:
Код

public class DigestUtil {
    
    static private String hexEncode(byte[] aInput) {
        StringBuffer result = new StringBuffer();
        char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'a', 'b', 'c', 'd', 'e', 'f' };
        for (int idx = 0; idx < aInput.length; ++idx) {
            byte b = aInput[idx];
            result.append(digits[(b & 0xf0) >> 4]);
            result.append(digits[b & 0x0f]);
        }
        return result.toString();
    }
    
    static public String createMD5(String input) {
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e1) {
            e1.printStackTrace();
        }
        
        byte[] output = md.digest(input.getBytes());
        return hexEncode(output);
    }
}
 
PM MAIL Skype GTalk Jabber YIM   Вверх
rrrookie
Дата 27.7.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 21.6.2006
Где: Rīga

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



Спасибо за вариант!
Где нашол? 

Я слышал что ето оченЬ хорошие алгритмы для криптования: SHA-1, SHA-160
реализацию в Java нашол через гугл. 

А как обычЬно криптуют паролЬи? ИсполЬзуя МД5? да? 
PM MAIL   Вверх
tux
Дата 27.7.2006, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Цитата(rrrookie @  27.7.2006,  19:55 Найти цитируемый пост)
Где нашол? 

В собственном проекте. smile

Цитата(rrrookie @  27.7.2006,  19:55 Найти цитируемый пост)
А как обычЬно криптуют паролЬи? ИсполЬзуя МД5? да?  

Я использую MD5, но вообще что-то слышал, что у него нашли какие-то уязвимости. У меня проекты не требуют какой-то параноидальной безопасности, поэтому и MD5 сойдет. 
PM MAIL Skype GTalk Jabber YIM   Вверх
rrrookie
Дата 27.7.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 21.6.2006
Где: Rīga

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



Цитата(rrrookie @  27.7.2006,  19:55 Найти цитируемый пост)
Где нашол? 

В собственном проекте. smile
------------------------------
не, не правда...
Нету у меня в проекте таких чудес :-)

Спасибо!

Но кто нитй может рассказатЬ о  SHA-1 или SHA-160? 
PM MAIL   Вверх
Alexandr87
Дата 27.7.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 9
Всего: 39



SHA - обычные алгоритмы хэширования данных, широко используются при создании ЭЦП. 
PM Jabber   Вверх
Hidrag
Дата 16.1.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: 3
Всего: 25



такой вопрос: хочу защитить свою программу паролем, пароль шифровать md5, а где лучше хранить этот файл? Так чтобы его не подминили. Хотел хранить в jar, но тогда как его изменить, ведь как я понял в собственный jar приложение писать не может...

Вообще задумка была такая: 
1. при запске jar, считывается контрольная сумма этого jar (с помощью md5) если она совпадает с записанной в ресурс строкой в Jar приложение запускается, если нет, то закрывается.
2. если предыдущий этап пройден, вылазит окно с ввводом пароля, юзер вводит пароль, это значение шифруется md5 и если оно совпадает с другой строкой из ресурса, то можно работать, если нет приложение закрывается.
3. Пользователь должен иметь возможность сменить пароль.
4. При закрытии приложения все данные сохраняются, считывается контрольная сумма jar и эти данные записываются в ресурс (который считывался при первом запуске).

Как можно получить контрольную сумму (кажется это так называется) md5 файла?
Раз нельзя писать в jar то какие альтернативы могут быть, где хранить пароли более безопасно?


--------------------
user posted image
PM WWW ICQ   Вверх
LSD
Дата 16.1.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Hidrag @  16.1.2007,  13:18 Найти цитируемый пост)
Раз нельзя писать в jar то какие альтернативы могут быть, где хранить пароли более безопасно?

На сервере.


Цитата(Hidrag @  16.1.2007,  13:18 Найти цитируемый пост)
Как можно получить контрольную сумму (кажется это так называется) md5 файла?

Код
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
FileInputStream in = new FileInputStream("some-file.bin");
byte[] buffer = new byte[64 * 1024];
int read;
while((read = in.read(buffer)) != -1)
  messageDigest.update(buffer, 0, read);
byte[] md5 = messageDigest.digest();
in.close();



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
powerOn
Дата 16.1.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



после 4 шага, когда ты допишешь в ресурс контрольную сумму, ты получишь новый Jar -- его контрольная сумма уже будет отличаться от той что  записана в ресурс, поскольку ты дописал - значит архив изменился. smile






--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Hidrag
Дата 16.1.2007, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: 3
Всего: 25



Цитата(powerOn @  16.1.2007,  13:28 Найти цитируемый пост)
после 4 шага, когда ты допишешь в ресурс контрольную сумму, ты получишь новый Jar -- его контрольная сумма уже будет отличаться от той что  записана в ресурс, поскольку ты дописал - значит архив изменился. 

опс... в любом случае тогда не получится в сам архив писать


LSD, 
спасибо за код!

Приложение локальное пользовательское, что то типа "дневника для девочек", решение с сервером отпадает... обычный файл легко подменить... smile

Это сообщение отредактировал(а) Hidrag - 16.1.2007, 13:38


--------------------
user posted image
PM WWW ICQ   Вверх
Alexandr87
Дата 16.1.2007, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 9
Всего: 39



Вопрос надо рассматривать более комплексно. Программа вообще рассчитана только на одного пользователя? Какие данные должны быть защишены?
------------------
Вообще проще всего использовать симметричное шифрование с формирование ключа на основе пароля. 
В начале файла с приватной информацией записывается какойндь фрагмент-идентификатор "успешного" расшифровывания. При логине из пароля формируется ключ, файл расшифровывается, с помощью фрагмента-идентификатора делается вывод о правильности ввода пароля.


Это сообщение отредактировал(а) Alexandr87 - 16.1.2007, 13:58
PM Jabber   Вверх
LSD
Дата 16.1.2007, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Hidrag @  16.1.2007,  13:37 Найти цитируемый пост)
Приложение локальное пользовательское, что то типа "дневника для девочек", решение с сервером отпадает... обычный файл легко подменить...

Тогда просто формируй ключ шифрования дневника на основе пароля.

Как это делается в KeePass:
- на основе пароля вычисляется хеш (там используется SHA1)
- на основе предыдущего хеша вычисляется его новый хеш
- в предыдущий пункт повторяется заданное число раз (это нужно чтобы снизить скорость подбора паролей)
- полученный хеш используется как ключ шифрования
- правильность декодирования проверяется по контрольным суммам блоков


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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