Как использовать один и тот же пароль для java и php?

Я использовал функцию php crypt для хеш-пароля. Например:

<?php $hash = '$2y$08$ffWmSGZOM5pNJpHNvpqMa.z01BL25WGoXViaWYhxS0WRaftgAxhkC'; $test = crypt("test", $hash); $pass = $test == $hash; echo "Test for functionality of compat library: " . ($pass ? "Pass" : "Fail"); echo "\n"; 

СЕЙЧАС: Если я использую passowrd_hash() php bcrypt passowrd_hash() я получаю следующий вывод:

Пароль: test

bcrypted password с помощью passowrd_hash() : $ 2y $ 08 $ ffWmSGZOM5pNJpHNvpqMa.z01BL25WGoXViaWYhxS0WRaftgAxhkC

Теперь я хочу иметь тот же результат в Android Java. Мои вопросы:

  1. Как я могу достичь этого?
  2. Есть ли какой-либо файл класса или функция по умолчанию в android java, чтобы я мог использовать для этого?
  3. Должен ли я писать пользовательскую функцию для достижения этой цели?

Я также хочу расшифровать пароль с помощью java.

Любой ответ с примером будет оценен. Спасибо всем.

Если вы настаиваете на использовании bcrypt в Java. Попробуйте это, jBCrypt .

Я использую laravel default password hasihing algorthim, используя bcrypt. Моя проблема заключалась в том, чтобы преобразовать его так же, как в Java. Я получил тот же пароль, используя jbcrypt. Например:

Здесь laravel bcrypted password is = "$ 2y $ 08 $ rW76CEOBYmWzeANFqNOQyei8ArmYpacN6MIRjS55sgpT.6p / 5eMv." Я взял эту строку в переменной

 String a_hash = "$2y$08$rW76CEOBYmWzeANFqNOQyei8ArmYpacN6MIRjS55sgpT.6p/5eMv."; 

И следующий код дает мне соответствующий результат:

 if (BCrypt.checkpw(candidate, a_hash)) System.out.println("It matches"); else System.out.println("It does not match"); 

Для этого я использовал библиотеку BCrypt от Damien Miller. Это полезные URL: http://www.mindrot.org/projects/jBCrypt/

Использование jBCrypt для соляных паролей в приложении для Android вызывает долгое зависание

Использование jBCrypt для соляных паролей в приложении для Android вызывает долгое зависание

Во-первых, нам нужно посмотреть, что делает функция криптографии в PHP. php.net заявляет:

«crypt () вернет хешированную строку, используя стандартный Unix DES-алгоритм или альтернативные алгоритмы, которые могут быть доступны в системе».

Предположим, что это DES, хотя DES не является алгоритмом хэширования.

Итак, теперь мы знаем, что используется «хеш-функция», это просто случай реализации этого другого языка (теперь педантизм, хеш-функции должны всегда возвращать один и тот же вывод с одним и тем же вводом).

Вот ссылка, которая показывает, как реализовать DES в Java: http://www.mkyong.com/java/jce-encryption-data-encryption-standard-des-tutorial/

Кроме того, DES плохо сломан, и его следует избегать. Как минимум, я бы рекомендовал SHA-2 для хеширования. Кроме того, вы не можете (опять же, педантизм в стороне) «дешифровать» хеш, поскольку хэш-функции – это один из способов.