0

1つのWebアプリをJavaからPHPに更新する必要があり、いくつかの難しい問題が見つかりました...大きな問題は、SHA1をJavaからPHPに変換することです。これは、私の前の誰かが、動作するために特定の認証コードを必要とするブラウザー拡張機能を開発したためです。 。プラグインを変更することはできません。Webアプリを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 };
  }

さて、phpにはバイト変数がないため、SecretKeyをバイトから他の何かに変換するのは非常に難しいことがわかりました...そしてphpのsha1はjavaとは異なることを読みました。

PHPでは、配列文字のsha1を作成することはできません。必要なのは、文字列のみです...

(他のstackoverflowの回答は、Javaコードをphpと等しくなるように変更する方法のみを示唆しています。PHPコードはJavaと等しくなければなりません...)

私はJavaを本当に知らないので、誰かが私を助けてくれることを願っています...

ありがとうございます :)

4

1 に答える 1

0

シンプルなstringas byte コンテナーを使用します。

たとえば、秘密鍵を保存する場合:

$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 に答える