0

我必须将一个 Web 应用程序从 Java 更新为 PHP,但我发现了一些难题……最大的问题是将 SHA1 从 Java 转换为 PHP,因为在我之前有人开发了一个浏览器扩展,需要特定的身份验证代码才能工作。 . 我不能更改插件,我只需要将网络应用程序从 java 转换为 php ...

这是代码:

 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 };
  }

现在,我发现很难将 SecretKey 从字节转换为 php 中的其他内容。因为 php 没有字节变量……而且我读到 php 中的 sha1 与 java 不同。

在 PHP 中,我无法制作数组字符的 sha1,它只需要一个字符串 ...

(其他stackoverflow答案仅建议如何将Java代码更改为等于php ..我需要PHP代码应该等于Java ...)

我希望有人能帮助我,因为我真的不了解 Java ......

谢谢大家 :)

4

1 回答 1

0

使用简单string的字节容器。

例如,如果要存储密钥:

$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));
于 2012-07-28T12:09:13.547 回答