Я хочу сгенерировать пароль пользователя Redmine для подтверждения пароля из приложения Android с Java.В Redmine пароль хранится как:
> The hashed password is stored in the following form: SHA1(salt + SHA1(password))
Согласно этой информации я пробовал следующий блок кода:
public String encryptPassword(String password)
{
String sha1 = "";
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(password.getBytes("UTF-8"));
sha1 = byteToHex(crypt.digest());
}
catch(NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch(UnsupportedEncodingException e)
{
e.printStackTrace();
}
return sha1;
}
public String byteToHex(final byte[] hash)
{
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
Для строки пароля "test" в Redmine db, у меня естьсоль 90dda74a652abf68cc30f18491e9710a
и хешированный пароль 0daf7c133e097573920fe9fadbb3a79bb279613d
.
С кодом, который я написал выше, я попытался:
val shaPassObj = Sha1Generator()
val shaPass = shaPassObj.encryptPassword("test")
val shaPass2=shaPassObj.encryptPassword("90dda74a652abf68cc30f18491e9710a$shaPass")
print(shaPass2)
И я получил 20fc92fc1b60e6254a35e080d53e0e5039e3f1ac
, который не совпадает с хешированнымпароль выше.Так что я делаю не так?Или форма хэширования Redmine отличается от SHA1 (соль + SHA1 (пароль))?