- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想了解散列算法的工作原理,特别是 SHA3-512。为了了解它是如何工作的,我在 Google 中搜索了代码并找到了 Hashlib。 .该代码不起作用,因为我没有 Hashlib 库(不确定应该调用什么)。我怎样才能得到它,它是在 C# 中应用 SHA3-512 的唯一方法吗?
一些我想知道的基本事情,
什么是Hashlib
?
它是图书馆吗?
Hashlib
和System.Security.Cryptography.HashAlgorithm
的输出结果/工作过程/功能是否相同?如果不是,那么它们之间有什么区别?
编辑:很抱歉从中间删除了几个问题。因为我觉得他们不需要再在这里展示了。
最佳答案
注意:2017 年更新。
Hashlib 是一个哈希实现库:
它包括相当多的加密和非加密散列的实现 - .NET 框架(在 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);
但再次注意,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
Keccak[c](M || s, d)
表示“Keccak with capacity c
, message M
、后缀位 s
和输出大小 d
。"
这(来自维基百科文章)是“标准”Keccak(和 Hashlib 的实现)和 SHA-3 在当前规范中的唯一区别:
For SHA3-n, an additional two bits 01 are appended to the message before padding.
尽管不知道 Hashlib 的工作原理,但实现它(例如通过修补 Hashlib 代码)并非易事。
这取决于您想要它做什么 - 如果您想要与最终确定的 SHA-3 标准兼容,那就不好了。
独立于 SHA-3 的整个 Keccak 系列本身就是一个标准 - 但 NIST 对 SHA-3 的调整仍然是 Keccak - 只是它的一个特定子集(很像 AES 是 Rijndael 的一个子集)。当 SHA-3 最终出现在 - 例如 - .NET 框架本身中时,它可能只是带有 NIST 选择的参数的 SHA-3,而不是带有可调整参数的通用 Keccak。
SHA-512 是 SHA-2 512 位 - 不与 SHA-3 512 相同。也就是说,要使用它,您只需导入 System .Security.Cryptography
- 在这种情况下使用
导入命名空间 - 使命名空间内的类可供您的代码使用。
之后,工作流程与任何其他HashAlgorithm
相同。
两者都不是。或者至少他们自己都没有。虽然盐可以改善问题,但这也不是最佳的安全措施。参见 How to securely hash passwords ,特别是从:
A basic hash function, even if secure as a hash function, is not appropriate for password hashing
关于c# - Hashlib 和 System.Security.Cryptography.HashAlgorithm 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24098253/
平时很少在jquery中用到this。查看代码时发现用到了,就调试出this的值,心想原来如此。还是挺有用的。这里总结一下this与$(this)的区别和使用。 $(this)生成的是什么?
使用单例类和应用程序范围的托管 bean 来保存应用程序数据有区别吗? 我需要查找某些 JNDI 资源,例如远程 bean 接口(interface),因此我为自己编写了一个单例来缓存我的引用并且只允
如果您仔细查看包含的图片,您会注意到您可以使用 Eclipse IDE 重构 Groovy 代码并将方法转换为闭包,反之亦然。那么,闭包到底是什么,它与方法有什么不同呢?有人可以举一个使用闭包的好例子
vagrant box repackage有什么区别( docs ) 和 vagrant package ( docs )? 我意识到 vagrant package仅适用于 VirtualBox 提
我想看看是否有人可以解释为什么以下代码适用于 valueOf 但不适用于其他代码。 import java.math.BigDecimal; public class Change { publ
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicates: What is Closures/Lambda in PHP or Javascript in layman te
This question already has answers here: Vagrant, Docker, Puppet, Chef (3个答案) 2年前关闭。 docker和chef有什么共同
以下代码在95%的机器上产生相同的输出,但是在几台机器上却有所不同。在 Debug模式下,输出: Changing from New to Fin OK 但在 Release模式下: Changing
////Creating Object var Obj; // init Object Obj= {}; 它们之间有什么区别两个? 有没有可能把它变成一个单行? 这样使用有什么好处吗?
我想找出定时器服务之间的区别。我应该使用哪个以及何时使用。我正在使用 Jboss 应用服务器。 1) java.ejb.Schedule。 @Schedule注解或配置自xml。 2) javax.e
我发现在 C++ 中可以通过三种不同的方式将对象传递给函数。假设我的类(class)是这样的: class Test { int i; public: Test(int x);
有什么区别。 public class Test { public static void main(String args[]) { String toBeCast = "c
如果我有一列,设置为主索引,设置为INT。 如果我不将其设置为自动递增,而只是将唯一的随机整数插入其中,与自动递增相比,这是否会减慢 future 的查询速度? 如果我在主索引和唯一索引为 INT 的
这两种日期格式有什么区别。第一个给出实际时间,第二个给出时间购买添加时区偏移值。 NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]
如果有一个函数,请说foo: function foo() { console.log('bar'); } 那么在 JavaScript 中,从另一个函数调用一个函数有什么区别,如下所示: f
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
代码是什么: class Time { private: int hours; int minutes; int seconds; pu
我知道这是非常基本的,但有人介意解释一下这两个数组声明之间的区别吗: #include array myints; ...和: int myints[5]; ...以及为什么 myints.size
我学会了如何根据 http://reference.sitepoint.com/css/specificity 计算 css 特异性但是,基于this reference,我不明白伪类(来自c)和伪元
为什么在运行 2) 时会出现额外的空行?对我来说 1 就像 2。那么为什么 2) 中的额外行? 1) export p1=$(cd $(dirname $0) && pwd) #
我是一名优秀的程序员,十分优秀!