2

ドキュメントに従って、次の情報からSHA1を生成しています。

フィンガープリントは、上記のフィールドと SecurePay トランザクション パスワードの SHA1 ハッシュで、パイプ セパレータ「|」を使用して次の順序になっています。

  1. EPS_MERCHANTID
  2. 取引パスワード (SecurePay サポートから提供)
  3. EPS_TXNTYPE (0 として)
  4. EPS_REFERENCEID (テスト用 123)
  5. EPS_AMOUNT (テスト用 100.00)
  6. EPS_TIMESTAMP (テスト用 20120910203805)

上記の指示に従いましたが、支払いを行うたびに「無効な指紋」と表示されます。コード例:

FormsAuthentication
  .HashPasswordForStoringInConfigFile("xxx|xxx|0|123|100.00|201‌20910203805","sha1")
  .ToLower();`
4

3 に答える 3

1

末尾に「|」を付けて、行を正しく終了していることを確認してください。または不要な末尾の'|'を削除します。

また、使用しているメソッドが、期待しているものを歪めるようなものをメソッド内に追加していないことを確認してください。(私はあなたがこれを行うかどうかわからないあなたが使用している特定のマシンに基づいて塩を考えています)

私はこれを使用してhttp://shagenerator.com/でハッシュを生成しようとしています:

ABC|password|1|Te‌​st Reference|1.00|20120912123421

与える:

25a1804285bafc078f45e41056bcdc42e0508b6f

私の入力を使用して、コードで同じキーを取得できますか?

アップデート:

代わりにこの方法を試してHashPasswordForStoringInConfigFile()、近づくかどうかを確認できますか?

private string GetSHA1String(string text)
{
    var UE = new UnicodeEncoding();
    var message = UE.GetBytes(text);

    var hashString = new SHA1Managed(); 
    var hex = string.Empty;

    var hashValue = hashString.ComputeHash(message); 
    foreach (byte b in hashValue)
    { 
        hex += String.Format("{0:x2}", b);
    } 

    return hex;
}

更新2:

エンコーディングを確認してください。ハッシュ出力を次のものと一致させることができることがわかりました。

var UE = new UTF8Encoding();

更新3:

次のコードはコンソールアプリで機能しました。ハッシュが同じ値を生成するのを見て、出力をhttp://shagenerator.com/と比較することもできました。

using System;
using System.Security.Cryptography;
using System.Text;
using System.Web.Security;

namespace SecurepayPaymentGatewayIntegrationIssue
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = @"ABC|password|1|Te‌​st Reference|1.00|20120912123421";
            Console.WriteLine(GetSHA1String(text));

            Console.WriteLine(FormsAuthentication.HashPasswordForStoringInConfigFile(text, "sha1").ToLower());

            Console.ReadKey();
        }

        private static string GetSHA1String(string text)
        {
            var UE = new UTF8Encoding();// ASCIIEncoding(); // UnicodeEncoding();
            var message = UE.GetBytes(text);

            var hashString = new SHA1Managed();
            var hex = string.Empty;

            var hashValue = hashString.ComputeHash(message);
            foreach (byte b in hashValue)
            {
                hex += String.Format("{0:x2}", b);
            }

            return hex;
        }
    }
}
于 2012-09-10T11:21:21.197 に答える
0

時刻を UTC Now として使用します。 string epsTimestamp = DateTime.UtcNow.ToString(@"yyyyMMddHHmmss");

また、暗号化に sha1 を使用していることも確認してください。

string data = EpsMerchant + "|" + EpsPassword + "|" + EpsTxnType + "|" + 
EpsReferenceId + "|" + EpsAmount + "|" + epsTimestamp;
string epsFingerprint = GetSha1String(data);

以下はsha1を取得するためのコードです

string GetSha1String(string input)
        {
            StringBuilder stringBuilder = new StringBuilder();
            foreach (byte b in GetHash(input))
                stringBuilder.Append(b.ToString("X2"));
            return stringBuilder.ToString();
        }

    public static byte[] GetHash(string inputString)
    {
        HashAlgorithm obj = SHA1.Create();
        return obj.ComputeHash(Encoding.UTF8.GetBytes(inputString));
    }
于 2018-10-25T00:33:32.897 に答える