我會保持簡短!我正在學習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」
,這是完全不同的東西。我當然也嘗試過用非空字符串。
有沒有人有建議?
貌似執行一個或你的校驗值是錯誤的。當他們將它命名爲SHA-3時,他們可能會改變IV,使其與Keccak的哈希值不同。 –
看起來像你得到的價值是爲SHA-3 -256以及我個人更新HashLib並獲得最新版本 – MethodMan
大衛,我很抱歉地說最新的代碼(變更集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