2012-07-31 125 views
1

我试图将我的系统连接到银行支付系统。问题是,如果它不是完全的灾难,他们的文档大多不是正确的。将C#代码翻译成Ruby代码

在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)。如果任何人都可以解释这些函数对字符串进行散列的功能,我会很高兴。

+0

伊克!你在说什么*银行? ;-)(抱歉题外话) – Jeroen 2012-07-31 21:04:34

+0

该散列让我想起了[OAuth的(http://oauth.net/core/1.0/) – 2012-07-31 21:14:54

回答

2

这很简单。

  1. notHashedStr获取ASCII编码的字节。
  2. 从字节
  3. 转换创建一个SHA1哈希在Base64编码字符串,哈希值。
  4. 返回Base64-SHA1-ASCII-String。

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

require 'digest/sha1' 
returnValue = Digest::SHA1.base64digest 'notHashedStr' 
+1

+1'base64digest'仅在Ruby 1.9的使用。你可以在1.8中做同样的事情:'Base64.encode64(Digest :: SHA1.digest('notHashedStr')'。 – Candide 2012-07-31 21:09:42

+0

+1 cool thanks :) – 2012-07-31 21:12:17