PHP バックエンドを Java バックエンドと統合しようとしています。Java バックエンドは、両端で一致するように正しくエンコードおよびハッシュ化する必要があるいくつかの資格情報を想定しています。
Java システムは文字列を一連のバイトに変換し (1)、そのシーケンスの HMAC/SHA256 キー付きハッシュを生成し (2)、base 64 でハッシュをエンコードします (3)。
private static final String HMAC_ALGORITHM = "HmacSHA256";
final SecretKey key = new SecretKeySpec('mysecret', HMAC_ALGORITHM);
final Mac hmac = Mac.getInstance(key.getAlgorithm());
hmac.init(key);
final String stringToHash = "blablabla";
final byte[] bytesToHash = stringToHash.getBytes("UTF8");
final byte[] hash = hmac.doFinal(bytesToHash);
return Base64.encodeBytes(hash);
(1) を実行し、PHP の文字列をバイト シーケンスに変換することができます。
$stringArray = unpack('C*', $string);
// これは機能し、この時点では Java システムとまったく同じです
ただし、2 番目の部分 (2) は一致していないようです。PHP で hmac にバイト配列を渡す方法はありますか
hash_hmac('sha256', $stringArray, $secret);
または、配列をループして魔法をかける必要がありますか?
ありがとう!