Java 一个php字节数组

Java 一个php字节数组,java,php,encoding,bytearray,hmac,Java,Php,Encoding,Bytearray,Hmac,我正在尝试将PHP后端与Java后端集成。Java后端需要一些凭据,这些凭据必须正确编码和散列以在两端匹配 java系统将一个字符串转换为一个字节序列(1),然后生成该序列(2)的HMAC/SHA256键控哈希,然后base 64对哈希进行编码(3) 我可以执行(1)并使用以下操作将PHP中的字符串转换为字节序列 $stringArray = unpack('C*', $string); //在这一点上,它的工作原理与Java系统完全相同 然而,第二部分(2)似乎不匹配,在PHP中有没有一种方

我正在尝试将PHP后端与Java后端集成。Java后端需要一些凭据,这些凭据必须正确编码和散列以在两端匹配

java系统将一个字符串转换为一个字节序列(1),然后生成该序列(2)的HMAC/SHA256键控哈希,然后base 64对哈希进行编码(3)

我可以执行(1)并使用以下操作将PHP中的字符串转换为字节序列

$stringArray = unpack('C*', $string);
//在这一点上,它的工作原理与Java系统完全相同

然而,第二部分(2)似乎不匹配,在PHP中有没有一种方法可以将字节数组传递给hmac,因为在Java中,hmac方法接受字节数组,而PHP方法需要字符串,例如

hash_hmac('sha256', $stringArray, $secret);
或者我需要在数组中循环并执行一些魔术吗


谢谢

我认为您不需要用php
解包

试试看

hash_hmac('sha256', $string, $secret, TRUE);
注意:我正在将实际字符串传递给函数,最后一个参数
raw\u output
设置为
TRUE

更新

您的java代码似乎是错误的

这应该如下所示

byte[] keyBytes = mysecret.getBytes(); // say mysecret is a String var
final SecretKey key = new SecretKeySpec(keyBytes, HMAC_ALGORITHM);

我必须在PHP上生成相同的Java值。唯一有效的方法就是这样

<?php

$verb = hash_hmac("sha256", "POST" , "9mO6oBVSmb2QTSeN73mEGHHnD", FALSE);

$path = hash_hmac("sha256", '/1.0/benefits/registerBenefit', pack("H*",  $verb), FALSE);

$query = hash_hmac("sha256", "" , pack("H*",  $path), FALSE);

$body  = hash_hmac("sha256", '{"id":"a7d23226-bdfc-4d85-a30a-b2d7eccc36e6","phone_number":"5511973512530","sku":"com.movile.cubes.br.biweekly.homolog","origin":"trade_up_group","application_id":437}' , pack("H*",  $query), FALSE);

$rawSignature   = hash_hmac("sha256", "x-kiwi-signature", pack("H*",  $body), FALSE);

$signature  = base64_encode( pack("H*",  $rawSignature));

var_dump($signature);

no joy不幸的是,php和javaJava的结果不同:私有静态最终字符串HMAC_ALGORITHM=“HmacSHA256”;最后一个字符串stringToHash=“blablabla”;最终字节[]bytesToHash=stringToHash.getBytes(“UTF8”);final byte[]hash=hmac.doFinal(bytesToHash);返回Base64.encodeBytes(散列);我正在尝试编写PHP等价物,你可以将完整的代码添加到你的问题中,完整的java代码。这是主要的部分,希望是你所需要的全部?嗨,山姆,面对同样的问题。你找到解决办法了吗?
byte[] keyBytes = mysecret.getBytes(); // say mysecret is a String var
final SecretKey key = new SecretKeySpec(keyBytes, HMAC_ALGORITHM);
<?php

$verb = hash_hmac("sha256", "POST" , "9mO6oBVSmb2QTSeN73mEGHHnD", FALSE);

$path = hash_hmac("sha256", '/1.0/benefits/registerBenefit', pack("H*",  $verb), FALSE);

$query = hash_hmac("sha256", "" , pack("H*",  $path), FALSE);

$body  = hash_hmac("sha256", '{"id":"a7d23226-bdfc-4d85-a30a-b2d7eccc36e6","phone_number":"5511973512530","sku":"com.movile.cubes.br.biweekly.homolog","origin":"trade_up_group","application_id":437}' , pack("H*",  $query), FALSE);

$rawSignature   = hash_hmac("sha256", "x-kiwi-signature", pack("H*",  $body), FALSE);

$signature  = base64_encode( pack("H*",  $rawSignature));

var_dump($signature);