我正在尝试将我的系统连接到银行支付系统。问题是,如果它不是一个彻底的灾难,他们的文档大多不正确。
在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)。如果有人能解释这些函数对要进行哈希处理的字符串的作用,我将非常高兴。
答案 0 :(得分:2)
这很简单。
notHashedStr
获取ASCII编码的字节。我从未做过任何红宝石,但它看起来有点像这样。
require 'digest/sha1'
returnValue = Digest::SHA1.base64digest 'notHashedStr'