c#加密库hashlib在其实现中是否正确?

本文关键字:是否 实现 加密 hashlib | 更新日期: 2023-09-27 18:17:04

Hashlib团队,

我不确定SHA3库(Keccak)是否返回正确的加密。我使用了从codeplex下载的最新源代码(变更集78295),但它不匹配维基百科(sha3页)中提供的矢量和结果

当我使用以下代码

IHash hash = HashFactory.Crypto.SHA3.CreateKeccak512();
HashResult res = hash.ComputeString("", System.Text.Encoding.ASCII);
string dd = res.ToString();

在我的VS 2012 IDE,我得到的结果为

DF987CFD-23FBC92E-7E87FAAC-A300EC3F-AA1DBADC-678E8EE9-4A830968-F22D9209-64AB402D-C5D0F7B2-0C9644BE-08056555-C789D295-8BDA3DF9-8C94BACC-EA25D3C1

这实际上应该返回:

0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e

根据以下帖子SHA-3 Keccak散列在c#中错误输出的简单实现?David回答说,最新的代码库应该会返回正确的结果。我不确定这些变化是否到位。

当我使用从ExtremelyLongMsgKAT_512.txt文件中获取的测试向量

abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno

和使用代码

hash.ComputeString("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno").ToString();

的结果也不同于预期。测试向量文件表示结果将是:

3E122EDAF37398231CFACA4C7C216C9D66D5B899EC1D7AC617C40C7261906A45FC01617A021E5DA3BD8D4182695B5CB785A28237CBB167590E34718E56D8AAB8

然而,实际结果是

"B9942109-EB762527-FB384E14-7EDA2DAA-71CA782F-4819B53E-E13C1C13-1C572D99-2B387FA7-212FF624-6EED988D-31AFB23B-4D1B7C44-BC38F908-46EE25F4-AABD5920"

c#加密库hashlib在其实现中是否正确?

虽然我不能说Hashlib,但ExtremelyLongMsgKAT_512.txt指出输入应该重复16777216次。在我的https://bitbucket.org/jdluzen/sha3端口中,我包含了大多数内置测试,包括非常长的测试。