2012-12-27 34 views
1

我會保持簡短!我正在學習C#,我試圖得到HashLib庫@https://hashlib.codeplex.com/爲新的SHA-3 Keccak算法工作。我寫了一個簡單的控制檯/ Win32應用程序,它應該輸出正確的哈希碼,但它不會!在C#中簡單實現SHA-3 Keccak散列到錯誤的輸出?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Diagnostics; 
using HashLib; 
using System.Threading.Tasks; 

namespace ConsoleApplication5 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      { 
       string passPhrase = ""; 
       IHash hash = HashFactory.Crypto.SHA3.CreateKeccak512(); 
       HashResult r = hash.ComputeString(passPhrase, System.Text.Encoding.ASCII); 

       Console.WriteLine(r.ToString().ToLower().Replace("-","")); 
       Console.WriteLine("{0}, {1}, {2}", hash.BlockSize, hash.HashSize, hash.Name); 
       Console.ReadLine(); 
      } 
     } 
    } 
} 

該應用程序構建並運行正常,但輸出是非常錯誤的。當我使用Keccak算法的其他人的實現時,我得到了不同的結果,並且它也不匹配例如這個wiki文章。 https://en.wikipedia.org/wiki/SHA-3所以有些顯然是錯誤的。

當我離開文本空,按例子,我得到了以下內容:「df987cfd23fbc92e7e87faaca300ec3f等等,等等」而維基和其他工具,說我應該得到

「0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e」

,這是完全不同的東西。我當然也嘗試過用非空字符串。

有沒有人有建議?

+1

貌似執行一個或你的校驗值是錯誤的。當他們將它命名爲SHA-3時,他們可能會改變IV,使其與Keccak的哈希值不同。 –

+0

看起來像你得到的價值是爲SHA-3 -256以及我個人更新HashLib並獲得最新版本 – MethodMan

+0

大衛,我很抱歉地說最新的代碼(變更集78295)不能解決問題。當我使用下面的代碼IHash hash = HashFactory.Crypto.SHA3.CreateKeccak512(); HashResult res = hash.ComputeString(「」,System.Text.Encoding.ASCII);字符串dd = res.ToString();我在VS 2012的IDE,我得到一個結果作爲DF987CFD-23FBC92E-7E87FAAC-A300EC3F-AA1DBADC-678E8EE9-4A830968-F22D9209-64AB402D-C5D0F7B2-0C9644BE-08056555-C789D295-8BDA3DF9-8C94BACC-EA25D3C1作爲指定的問題是相同的我不知道的變化是否就位,當我用它從文件 – Bepenfriends

回答

6

你HashLib的版本太舊。如果你看一下recent changes你可以看到從你到了一個你應該得到一個改變的測試向量。 (該算法也改變了,當然)。

+0

採取能否請你澄清一下,做了算法的變化當測試向量? – joe

+1

當Keccak被接受爲SHA-3時,算法發生了變化。 –