我正在尝试将 PHP 后端与 Java 后端集成。Java 后端需要一些凭据,这些凭据必须正确编码和散列以在两端匹配。
Java 系统将字符串转换为字节序列 (1),然后生成该序列的 HMAC/SHA256 键控散列 (2),然后基于 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)似乎不匹配,有没有办法在 PHP 中将字节数组传递给 hmac,因为在 Java 中,HMAC 方法接受一个字节数组,而 PHP 需要一个字符串,例如
hash_hmac('sha256', $stringArray, $secret);
还是我需要遍历数组并做一些魔术?
谢谢!