1

我正在尝试将我的系统连接到银行支付系统。问题是,如果这不是一场彻底的灾难,他们的文档大多是不正确的。

在 3D 安全系统的文档中,银行要求我填写一个 html 表单并将其提交到他们的系统。表单应包含一些数据和数据的 SHA1 哈希值和数据。我试了很多次,但是银行系统一直返回“Hash not correct”的错误。

在检查了他们的示例 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。

我从来没有做过任何红宝石,但它必须看起来有点像这样。

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