0

これは、c# と php が sha1 ハッシュをエンコードする方法が異なるため問題があることは承知していますが、ac# sha1 の php バージョンの例を見つけることができませんでした。

c# コード:

  private string GetHashedKey(string supplierPrivateKey, DateTime now)
   {
  if (string.IsNullOrEmpty(supplierPrivateKey))
    return "";

  supplierPrivateKey += now.ToString("yyyy/MM/dd HH:mm:ss");

  Encoding enc = Encoding.UTF8;
  byte[] buffer = enc.GetBytes(supplierPrivateKey);
  SHA1CryptoServiceProvider cryptoTransformSha1 =
  new SHA1CryptoServiceProvider();
  string hash = BitConverter.ToString(
  cryptoTransformSha1.ComputeHash(buffer)).Replace("-", "");
  return hash;
   }

php:

 $hashedSupplierPrivateKey = $supplierPrivateKey.gmdate("Y/m/d H:i:s");


  $hashedSupplierPrivateKey = utf8_encode($hashedSupplierPrivateKey);
  $hashedSupplierPrivateKey = sha1($hashedSupplierPrivateKey,true);

    //Error here

     $hashedSupplierPrivateKey = str_replace("-", "", $hashedSupplierPrivateKey);

     $hashedSupplierPrivateKey = strtoupper($hashedSupplierPrivateKey);
     echo $hashedSupplierPrivateKey;

C# で生成された正しいハッシュの例を次に示します。

      530DFA9CD08CF36017B7C781E1A8D0CEC74CB944
4

1 に答える 1

0

C#では生のバイトを取得すると思いますが、phpではsha1()はデフォルトで16進数を返します。2 番目の引数として true を php の sha1() に渡して、生のバイトを取得できます。または、C# で 16 進数に変換します。

于 2013-11-12T11:07:20.093 に答える