从java到PHP的SHA1字节数组转换
我必须将一个web应用程序从Java更新到PHP,我发现了一些难题。。。 最大的问题是将SHA1从Java转换为PHP,因为在我之前有人开发了一个浏览器扩展,需要一个特定的身份验证代码才能工作。。。我无法更改插件,我只需将web应用程序从java转换为php 代码如下:从java到PHP的SHA1字节数组转换,java,php,variables,type-conversion,sha1,Java,Php,Variables,Type Conversion,Sha1,我必须将一个web应用程序从Java更新到PHP,我发现了一些难题。。。 最大的问题是将SHA1从Java转换为PHP,因为在我之前有人开发了一个浏览器扩展,需要一个特定的身份验证代码才能工作。。。我无法更改插件,我只需将web应用程序从java转换为php 代码如下: private static final byte[] SecretKey; public static String AuthCode(String url) { byte[] urlBytes = url.
private static final byte[] SecretKey;
public static String AuthCode(String url) {
byte[] urlBytes = url.getBytes("US-ASCII");
byte[] concatenated = new byte[SecretKey.length + urlBytes.length];
System.arraycopy(SecretKey, 0, concatenated, 0, SecretKey.length);
System.arraycopy(urlBytes, 0, concatenated, SecretKey.length, urlBytes.length);
byte[] hash = HashTools.calculateHash(concatenated, "SHA1");
return CodecTools.encodeBASE64(hash);
}
static {
SecretKey = new byte[] { 18, -15, -48, 73, 54, -115, 34, -87 };
}
现在,我发现在php中很难将SecretKey从字节转换为其他内容。。因为php没有字节变量。。。我读到php中的sha1与java不同
在PHP中,我无法生成数组字符的sha1,它只需要一个字符串
(其他stackoverflow答案仅建议如何将Java代码更改为与php相等的代码。我需要php代码应与Java相等…)
我希望有人能帮助我,因为我不太懂Java
感谢所有:)使用简单字符串作为字节容器
例如,如果要存储密钥:
$secretKeyArray = array(18, -15, -48, 73, 54, -115, 34, -87);
$secretString = '';
foreach($secretKeyArray as $k => $v) {
$secretString.= chr($v & 0xFF); // trim to 8 bits (for the negative values)
}
现在您已将密钥存储在$secretString
中
编辑:
连接的数组将是:
$concatenated = $secretString . $url;
然后
return base64_encode(sha1($concatenated, true));
谢谢你。。。但是如何处理
urlBytes
?在Java中有.getBytes(“US-ASCII”)
,在PHP中没有…这里有些奇怪。。。使用此secretkey=array(-26,68,-35,-71,-92,66,66,-6,-78,-15,-18,79,74,96,58,-46),
和此url=”http://localhost:8080/sdweb/install/plugin?goto=http%3A%2F%2Flocalhost%3A8080%2Fsdweb%2Fload%2Fform“
我在java中有这个auth code=GXkt5cLC9+ioiewwwwbwarnuxmev0=
”。。。在PHP第。。。。它是不同的…它是fviaimu5Mu6X/4d51bzVDM3KbzI=
你是按原样传递url还是按解码后的url?尝试一步一步地调试以捕捉差异。