1

これが私の問題です:

暗号化された文字列を生成する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);
}

2つの関数の戻り値は同じではありません。私が気付いたのは、base 64にエンコードする前は、両方の関数の結果が同じであるということです。したがって、私にとっての問題は、キーの生成ではなく、エンコーディングにあります。

助けてくれる人はいますか?

4

1 に答える 1

2

答えは、PHP関数hash_hmacのドキュメントにあります。

TRUEに設定すると、生のバイナリデータを出力します。FALSEは、小文字のヘキシットを出力します。

最後の引数として「true」を渡します。ハッシュはバイナリです。それらを文字列に変換する場合、多くの場合、16進数でエンコードされます。ただし、この場合はbase-64でエンコードするため、生のバイナリ形式が必要です。

于 2012-06-13T00:36:32.940 に答える