1

システムを銀行の支払いシステムに接続しようとしています。問題は、完全な災害でない限り、彼らのドキュメントはほとんど正しくないということです。

3D セキュア システムのドキュメントでは、銀行から html フォームに記入してシステムに送信するように求められています。フォームには、いくつかのデータと、データとデータの SHA1 ハッシュを含める必要があります。何度も試してみましたが、銀行のシステムは常に「ハッシュが正しくありません」というエラーを返しました。

C# コードの例を調べたところ、ハッシュ結果を取得するために使用されている関数が見つかりました。問題は、関数が単にデータをハッシュするのではなく、データに対して他の処理を行っていたことです。そして、より大きな問題は、ハッシュされた文字列に対してこのコードが何をしているのかがわからないことです。

public static string CreateHash(string notHashedStr)
    {
        SHA1 sha1 = new SHA1CryptoServiceProvider();
        byte[] notHashedBytes = System.Text.Encoding.ASCII.GetBytes(notHashedStr);
        byte[] hashedByte = sha1.ComputeHash(notHashedBytes);
        string hashedStr = System.Convert.ToBase64String(hashedByte);

        return hashedStr;
    }

私は .Net フレームワークの経験がほとんどなく、Mac も使用しているため、コードを簡単にテストすることはできません。また、MSDN は間違いなく私には向いていません (私はほとんどの場合 Ruby 開発者であり、C を十分に知っています)。これらの関数がハッシュされる文字列に対して何をするかを誰かが説明できれば、とてもうれしいです。

4

1 に答える 1

2

とても簡単です。

  1. から ASCII エンコードされたバイトを取得しますnotHashedStr
  2. そのバイトから SHA1 ハッシュを作成します
  3. そのハッシュを Base64 でエンコードされた文字列に変換します。
  4. その Base64-SHA1-ASCII-String を返します。

Ruby を行ったことはありませんが、このように見えるはずです。

require 'digest/sha1'
returnValue = Digest::SHA1.base64digest 'notHashedStr'
于 2012-07-31T20:57:59.497 に答える