- 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/
我是一名新的 Windows 8 开发人员,我有一些代码是为 Linux 设计的,但只要安装了 GTK# 也可以在 Windows 上运行。 我目前正在将该应用程序作为现代 UI (Metro) 应用
我正在尝试通过本文之后的证书身份验证来获取 saml token How to pass a certificate to WSTrust to get Saml Token 当我像这样调用电话时出现
大多数签名证书足迹都是 20 字节长(Windows 证书管理器中的字段“足迹”)。 这怎么可能是颁发(认证)机构签署的值?具体来说,证书的签名应该是由私钥签名的证书字段的哈希值,因此至少具有颁发者私
有没有办法证明,我的意思是技术上和法律上证明,一段代码已经在计算机上的特定时间运行? 我认为这可以通过涉及校验和和可信时间戳等加密技术来实现,您怎么看? 最佳答案 技术上,问题是您是否为这项任务事先准
我用公钥加密数据,用私钥解密数据。 是否可以用一个公钥拥有多个私钥? 最佳答案 不,你不能,这是公私钥加密的本质。为什么你想要一个公钥有多个私钥?如果您想签署加密文件怎么办?如果这可能的话,我将能够将
数字签名取决于消息和 key 。假设接收方多次复制消息(我们唯一 ID 的原因),为什么签名会不同(因为消息和 key 相同)? 最佳答案 比特币使用 ECDSA,同一消息和 key 的签名不同的原因
PKC 有问题 考虑以下场景 当发送者需要向接收者发送消息时: sender 使用receiver's Public Key生成密文 receiver 使用receivers 私钥解密密文。 所以我的
如果您有以下形式的椭圆曲线: y^2 = x^3 + a*x + b (mod p) 有没有好的程序来计算这条曲线上的点数? 我已经阅读了 Schoof 和 Schoof-Elkies-Atkin
我需要创建一个一次性填充板来加密一些数据(大小为几KB)。我应该如何生成一次一次性填充,以避免与诸如rand()之类的基本随机数生成相关的所有伪随机问题? 我是否可以使用现有的,受信任的工具或库? 最
谁能提出一个工具包或框架(或一个想法),该工具包或框架(或构想)可用于在没有受信任的第三方服务器的情况下实现安全且防欺诈的在线扑克(德州扑克)客户端吗? 最佳答案 您要问的是所谓的mental pok
我经营一个网站,我们将某些帐户标记为骗子,并“标记”他们的帐户和所有使用的信用卡都是坏的。我们不存储实际的信用卡值,而是存储它的校验和/MD5 算法。 我们现在一直在碰撞。存储这些值的最佳方法是什么
散列函数中的多重碰撞与第一或第二原像之间有什么区别。 第一次原像攻击:给定一个散列 h,找到一条消息 m,使得 哈希(m) = h。 第二个原像攻击:给定一个固定的消息 m1,找到一个不同的消息 m2
当我听说破解加密算法的方法时,我注意到通常关注如何非常快速地解密以及如何减少搜索空间。但是,我总是想知道如何识别成功的解密,以及为什么这不会形成瓶颈。还是通常假设加密/解密对是已知的? 最佳答案 来自
我看到了一个通过以下步骤生成 AES key 的代码片段: 生成一个 16 字节的随机值数组。 SecureRandom random = new SecureRandom(); byte[] key
你好 我有一个长度为 n 的二进制字符串。我的目标是字符串中的所有位都等于“1”。 我可以翻转我想要的字符串的每一位,但在翻转字符串的位后,它会进行随机循环移位。(移位长度均匀分布在 0...n-1
当A发送数据到 B通过使用公钥加密的网络连接,A 如何达到认证、保密的目标 ? 最佳答案 在这种情况下,A 使用 B 的公钥,B 使用 A 的公钥。 secret 性:如果 A 使用 B 的公钥加密某
在挑战-响应机制(和其他系统)中,建议不要使用基于时间的随机数。 为什么应该避免? 最佳答案 (免责声明:我没有加密货币学位,我写的一切只是外行的意见。) 不鼓励使用基于时间的随机数,因为它们很可能偶
消息摘要用于验证消息是否是预期消息。 将散列摘要与内容捆绑在一起以形成消息会增加多少碰撞和原像攻击消息的难度? 例如编码: message = data . hash1(data) message_h
我想知道是否可以对大多数英特尔芯片中存在的 TPM ( http://en.wikipedia.org/wiki/Trusted_Platform_Module ) 进行编程,以便: - decide
在关于 Block Cipher Modes 的维基百科文章中他们有一个整洁的小图表 未加密的镜像、使用 ECB 模式加密的同一镜像以及使用其他方法加密的同一镜像的另一个版本。 在大学时,我开发了自己
我是一名优秀的程序员,十分优秀!