Проблема с подтверждением пароля Redmine SHA1 (Kotlin & Java) - PullRequest
0 голосов
/ 22 октября 2018

Я хочу сгенерировать пароль пользователя 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 (пароль))?

...