Gil*_*eed 1 c# hashalgorithm hashlib
我试图了解散列算法的工作原理,特别是SHA3-512.为了了解它是如何工作的,我在Google中搜索了代码并遇到了Hashlib.代码不起作用,因为我没有Hashlib库(不确定应该调用它).我怎样才能得到它,这是在C#中应用SHA3-512的唯一方法吗?
我想知道一些基本的东西,
什么是Hashlib?
它是图书馆吗?
是的输出结果/工作流程/功能Hashlib和System.Security.Cryptography.HashAlgorithm一样吗?如果没有,那么它们之间有什么区别?
编辑:很抱歉从中间删除几个问题.因为我觉得他们不再需要在这里展示了.
注意: 2017年更新.
Hashlib是一个哈希实现库:
它包括相当多的加密和非加密哈希的实现 - 这两者都已经被.NET框架(in System.Security.Cryptography)支持,而那些不是.您需要它 - 或其他外部实现 - 来支持SHA-3.
但是请注意,Hashlib实际上并没有在最终形式中包含SHA-3 - 而是在对它进行一些调整之前的方式.这意味着,它的输出将不是您对SHA-3的期望.
HashLib使用与.NET不同的体系结构来HashAlgorithm实现其哈希算法 - 输出相同(对于相同的算法,例如SHA256),用法不是.但它有一个包装器/适配器,可以使工作流程与HashAlgorithm例如:
IHash hash = HashFactory.Crypto.SHA3.CreateKeccak512();
HashAlgorithm hashAlgo = HashFactory.Wrappers.HashToHashAlgorithm(hash);
// Now hashAlgo can be used the same as any .NET HashAlgorithm, e.g.:
// Create byte input from string encoded as UTF-8
byte[] input = Encoding.UTF8.GetBytes("Hello Keccak!");
byte[] output = hashAlgo.ComputeHash(bytes);
Run Code Online (Sandbox Code Playgroud)
但同样要注意,Keccak512这与SHA-3不同 - 它不会提供与实际512位SHA-3实现相同的哈希值.
C#中最终SHA-3的实际实现仍然是(2017)很少和很远 - 与Hashlib中实现的Keccak的差异非常小,尽管它对输出有重大影响,就像哈希算法的情况一样 - 由于维基百科不再提供差异的例子,这里有一个:
Keccak-512('abc') =
Keccak[1024]('abc', 512) =
18 58 7d c2 ea 10 6b 9a 15 63 e3 2b 33 12 42 1c
a1 64 c7 f1 f0 7b c9 22 a9 c8 3d 77 ce a3 a1 e5
d0 c6 99 10 73 90 25 37 2d c1 4a c9 64 26 29 37
95 40 c1 7e 2a 65 b1 9d 77 aa 51 1a 9d 00 bb 96
SHA3-512('abc') =
Keccak[1024]('abc' || 01, 512) =
b7 51 85 0b 1a 57 16 8a 56 93 cd 92 4b 6b 09 6e
08 f6 21 82 74 44 f7 0d 88 4f 5d 02 40 d2 71 2e
10 e1 16 e9 19 2a f3 c9 1a 7e c5 76 47 e3 93 40
57 34 0b 4c f4 08 d5 a5 65 92 f8 27 4e ec 53 f0
Run Code Online (Sandbox Code Playgroud)
Keccak[c](M || s, d)表示"具有容量 c,消息 M,后缀位 s和输出大小的 Keccak d".
这(来自维基百科文章)是"标准"Keccak(和Hashlib的实现)和SHA-3之间的唯一区别,因为它在当前规范中看起来:
对于SHA3-n,在填充之前将附加的两位01附加到消息.
然而,在不知道Hashlib如何工作的情况下,实现它(例如通过修补Hashlib代码)并非易事.
这取决于你想要它 - 如果你想要与最终的SHA-3标准兼容,那就不好了.
整个Keccak系列,独立于SHA-3,本身就是一个标准 - 但NIST对SHA-3的调整仍然是Keccak - 只是它的一个特定子集(很像AES是Rijndael的一个子集).当SHA-3最终出现在 - 例如 - .NET框架本身时,它可能只是选择了NIST参数的SHA-3,而不是具有可调参数的通用Keccak.
SHA-512的SHA-2 512位- 不一样的SHA-3 512这就是说,要使用它,你只需输入System.Security.Cryptography- using在这种情况下,进口的命名空间 -可以让你的代码命名空间中的类.
之后,工作流程与其他工作流程相同HashAlgorithm.
他们俩都没有.或者至少他们自己都没有.虽然盐改善了问题,但这也不是最佳安全性.请参阅如何安全地哈希密码,具体来自:
即使作为哈希函数安全,基本哈希函数也不适用于密码哈希
| 归档时间: |
|
| 查看次数: |
5860 次 |
| 最近记录: |