Я чувствую необходимость изменить платформы веб-сайтов с Java на PHP, но я хотел бы сохранить все пароли своих пользователей ...
У меня был этот код для хеширования пароля перед записью хешированного значения в качестве пароля на сайт:
MessageDigest md = null;
md = MessageDigest.getInstance("SHA");
md.update(plaintext.getBytes("UTF-8"));
byte raw[] = md.digest();
hash = new Base64().encodeToString(raw).replaceAll("\n", "").replaceAll("\r", "");
Я думаю, что код Java выполнял хеширование пароля SHA-1, но перед этим он был закодирован в байт в UTF-8, а затем в кодировке Base64.
Я бы хотел, чтобы код PHP делал то же самое, то есть возвращал то же значение хэша для того же пароля, что и в Java, только кажется, что код PHP, выполняющий хэширование SHA-1, у меня не вернется то же самое значение SHA (-1, не закодированное Base64, я думаю?) по сравнению с декодированным значением Java Base64 хеша ... может ли это быть связано с тем фактом, что мои пароли в PHP не являются байтами UTF-8 сначала закодировать (и как я могу это сделать в PHP), пожалуйста?
приписка
Еще одна странная вещь ... все мои пароли в Java имеют длину 28 символов (обычно что-то вроде этого rnwn4zTNgH30l4pP8V05lRVGmF4=
) ... но значение Base64().decode(hash)
этих хэшей паролей составляет 10 символов (пример [B@14e1f2b
) .
Я думал, что Base64 сделал дополнительный 1 символ для каждых 3 символов (28 или 27, исключая padding = charter, намного больше, чем на треть больше, чем эти 10 символов), так что я как-то неправильно выполняю вызов декодирования ??
И вдобавок ко всему, значения хэширования пароля SHA-1 в PHP имеют длину 40 символов (в базе данных mysql UTF-8) примерно так: dd94709528bb1c83d08f3088d4043f4742891f4f
?