Java 一个php字节数组
我正在尝试将PHP后端与Java后端集成。Java后端需要一些凭据,这些凭据必须正确编码和散列以在两端匹配 java系统将一个字符串转换为一个字节序列(1),然后生成该序列(2)的HMAC/SHA256键控哈希,然后base 64对哈希进行编码(3) 我可以执行(1)并使用以下操作将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中有没有一种方
$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);