Base64_encode отличается между Java и PHP

Вот моя проблема:

У меня есть функция JAVA для создания зашифрованной строки. Я должен сделать то же самое в PHP.

Моя функция Java:

String generateSignature () {
    byte[] Sequence = ("hello").getBytes("UTF-8");
    Mac HMAC = Mac.getInstance("HMACSHA256");
    HMAC.init("SECRET_KEY");
    byte[] Hash = HMAC.doFinal(Sequence);
    String Signature = new String(Base64.encodeBase64(Hash));
    return Signature;
}

Моя функция PHP:

function generateSignature() {
    $sequence = "hello";
    $encrypted = hash_hmac('sha256', $sequence, "SECRET_KEY");
    return base64_encode($encrypted);
}

Возвращаемое значение двух функций не совпадает. Что я заметил, так это то, что до кодирования в базу 64 обе функции имеют одинаковый результат. Итак, для меня проблема не в генерации ключа, а в кодировке.

Кто-нибудь может помочь, пожалуйста?


person julienpar    schedule 12.06.2012    source источник
comment
Какая разница?   -  person Esailija    schedule 12.06.2012
comment
Здравствуйте .. Я думаю, вы работали с API WooCommerce. У меня такая же проблема. Удалось ли вам подключиться к API с помощью Java.? Пожалуйста, помогите мне, я получаю ошибку "Подпись не совпадает"   -  person Gopal Singh Sirvi    schedule 02.04.2015


Ответы (1)


Ответ находится в документации для PHP-функции hash_hmac.

Если установлено значение TRUE, выводятся необработанные двоичные данные. FALSE выводит шестнадцатеричные символы нижнего регистра.

Передайте "true" в качестве последнего аргумента. Хэши двоичные. При преобразовании их в строки они часто кодируются в шестнадцатеричном формате. Но в этом случае вы собираетесь кодировать его в base-64, поэтому вам нужна необработанная двоичная форма.

person John Watts    schedule 13.06.2012