Задать вопрос
@rustem_ck

Почему в Android Java и PHP HMAC SHA 256 разные результаты?

Не могу понять, почему:

Android Java:
private hash_hmac(String str, String secret){
    Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
    SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256");
    sha256_HMAC.init(secretKey);
    String hash1 = Base64.encodeToString(sha256_HMAC.doFinal(str.getBytes("UTF-8")), 0);
        return hash1;
    }


Переменные:
str = "eyJoYXNoIjoic29tZVJlcUhhc2hTdHIiLCJhbnN3ZXIiOnRydWV9"
    secret = "AusVwlqhJY4YvuCIdotMpduVWWQdiVnl"


Результат:

UuJhaD7sjLXUPN01JJWEcObIwDdLXHturBdSZFxKPxI=

и в PHP:
$str=base64_encode('eyJoYXNoIjoic29tZVJlcUhhc2hTdHIiLCJhbnN3ZXIiOnRydWV9');
    $key='AusVwlqhJY4YvuCIdotMpduVWWQdiVnl';
    print(base64_encode(hash_hmac('sha256', $str, $key,true)));


Результат:

AWFG4WXHtOToeN8d4J4Lt67u8VVa35AxBfIEsg31DhU=

Разные результаты. Не могу понять, почему. При этом в desktop JAVA совпадает с PHP, а в Android - нет.
  • Вопрос задан
  • 1164 просмотра
Подписаться 3 Оценить 2 комментария
Решения вопроса 1
neuotq
@neuotq
Прокрастинация
Если верить Стэковерфлоу, разница в обработчике строк на Андроиде в Джаве есть, чтобы работала так же как на декстопе нужно добавить ключ Base64.NO_WRAP
Base64.encode("foobar".getBytes(), Base64.NO_WRAP);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы