- 1
- 2
- 3
- 4
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHMD5ANDTRIPLEDES");
PBEKeySpec spec = new PBEKeySpec(password, salt, 1024, 128);
SecretKey key = factory.generateSecret(spec);
hexdump(key.getEncoded());
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+72
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHMD5ANDTRIPLEDES");
PBEKeySpec spec = new PBEKeySpec(password, salt, 1024, 128);
SecretKey key = factory.generateSecret(spec);
hexdump(key.getEncoded());
http://ideone.com/bVElQG
Не, ну я все понимаю, PKCS #5 1.5 аля PBE, MD5 и DES не считаются безопасными алгоритмами... но не настолько же...
LispGovno 15.12.2013 01:50 # 0
http://www.youtube.com/watch?v=gymNWGBR9zs
Кому-то были нужны кавказцы? На 47 секунде.
Говно в переизобретении (research) своего алгоритма шифрования?
bormand 15.12.2013 08:18 # 0
Не, говно в том, как ключ шифрования порождается на основе пароля.
PBKDF2 (аля PKCS #5 2.0) реализован нормально, его я и буду юзать.
А PBE (аля PKCS #5 1.5) почему-то реализовали через анус. И порожденный ключ представляет собой... Ну ты видишь, по выхлопу, что он из себя представляет.
anonimb84a2f6fd141 15.12.2013 01:51 # −2
bormand 15.12.2013 08:13 # +1
LispGovno 15.12.2013 08:22 # 0
bormand 15.12.2013 08:39 # +4
Хуже, просто каждая буква слова. Очень секьюрное порождение ;)
Где обещанные алгоритмом 1024 итерации md5? Где соль? Где 128 бит выхлопа то в конце-концов...
Суть KDF (key derivation function) в том, чтобы затруднить перебор паролей, и сделать его настолько же сложным, насколько брутфорс ключей (а 128 бит это дофига). Рандомная соль заставляет подбирать каждый пароль по-отдельности. Большое количество итераций (рекомендуется минимум 1000, но можно и больше, например часто берут столько, чтобы комп считал их целых 100мс) сильно снижает скорость перебора. Ну и нормальная KDF должна выдавать нужное выбранному нами алгоритму количество бит (например 128 или 256) вне зависимости от длины пароля.
inkanus-gray 15.12.2013 09:04 # +1
bormand 15.12.2013 09:10 # +2
Но в принципе PBEWITH* и не нужны, т.к. им на смену придумали PBKDF2, который и посекьюрней, и реализован в жабе правильно (сверял на рандомных векторах со своей наколенной реализацией). А хардкорщики могут юзать scrypt. Х.з. почему у них такая извращенная логика, и надо передавать соль и число итераций прямо алгоритму шифрования, а не алгоритму порождения ключа. Видимо, реальное порождение ключа идет уже в init().
anonimb84a2f6fd141 15.12.2013 09:49 # −2
bormand 15.12.2013 10:02 # +1
anonimb84a2f6fd141 15.12.2013 09:46 # −4
bormand 15.12.2013 09:55 # +2
LispGovno 15.12.2013 02:00 # 0
anonimb84a2f6fd141 15.12.2013 02:22 # 0
anonimb84a2f6fd141 15.12.2013 09:48 # −1
bormand 15.12.2013 09:51 # +3
anonimb84a2f6fd141 16.12.2013 02:41 # 0
bormand 16.12.2013 06:26 # +1
В общем-то даже в паскале вроде бы можно писать begin и end просто так. Скобки это же самый обычный statement, который можно юзать в любом месте, где допустимы statement'ы.
inkanus-gray 16.12.2013 09:09 # 0
Только в нём оно совершенно без надобности. В Алголе хотя бы можно в начале каждого блока объявлять переменные, а тут ни локальных объявлений, ни брейков, ни деструкторов... Для чего-то серьёзного приходится объявлять вложенную процедуру/функцию.