2014-10-16 6 views
1

В PHP реализация хэширования Blowfish просто вызывает функцию string crypt(string $str [,string $salt]) и передает соответствующую соль солей, состоящую из «$ 2a $», «$ 2x $» или «$ 2y $ », параметр две цифры затрат, "$", и 22 символов (http://php.net/manual/en/function.crypt.php):Шифрование Blowfish с пользовательской солью в Java

<?php 
    echo crypt('SAD123', sprintf('$2a$10$%s', '7711cbpe58dfpogiu04985')); 

результат:

$2a$10$7711cbpe58dfpogiu0498u5Vh773A3qx.3LE3ro3NX7F9c9N7.pOm 

Теперь нужно перенести эту реализацию в Java (или Scala) , и не имеют идей, как получить такой же результат ...

p.s. Я использую Cipher.getInstance("Blowfish")

ответ

2

Вы можете попробовать jBcrypt библиотеку:

public String crypt(String clearText) { 
    return BCrypt.hashpw(clearText, BCrypt.gensalt(10)); 
} 

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

Для полноты, это как воспроизвести ваш пример:

String encrypted = BCrypt.hashpw("SAD123", "$2a$10$7711cbpe58dfpogiu04985"); 
// encrypted is $2a$10$7711cbpe58dfpogiu0498u5Vh773A3qx.3LE3ro3NX7F9c9N7.pOm 
+0

Спасибо, что работает отлично :-) Я считаю, что должен быть стандартным апи способом Java, хотя))) – Alexander

+0

РНР 'крипты () 'функция реализует bcrypt под капотом (при вызове с выделенной солью), [подробнее] (https://stackoverflow.com/questions/4795385/how-do-you-use-bcrypt-for-hashing-passwords- в-РНР). Bcrypt основан на Blowfish (который является симметричным блочным шифрованием), но использует конкретную фазу расписания ключей, которая делает его односторонним алгоритмом хеширования. Хотя Java обеспечивает реализацию Blowfish, я не думаю, что вы можете построить реализацию bcrypt поверх нее из-за этих различий (сам jBcrypt является чистой реализацией java и не полагается на стандартный api). –

Смежные вопросы