- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个散列算法对象(在本例中为 SHA1),我向其提供数据,以便在调用 Result 属性时最终获得散列结果。
问题是一旦调用了 m_HashAlgorithm.Hash 属性,该对象就不能再用于喂食。如果我尝试喂它,我会得到:System.Security.Cryptography.CryptographicUnexpectedOperationException:在检索哈希值之前必须完成哈希。
我需要能够获得一个中间散列结果,但继续提供并稍后获得另一个结果。有办法实现吗?
private readonly HashAlgorithm m_HashAlgorithm;
public DigitalSignatureCreator(HashAlgorithm hashAlgorithm)
{
m_HashAlgorithm = hashAlgorithm;
m_MemoryStreamEncrypt = new MemoryStream();
m_CryptoStreamEncrypt = new CryptoStream(m_MemoryStreamEncrypt, m_HashAlgorithm, CryptoStreamMode.Write);
}
public void Feed(byte[] data, int offset, int count)
{
m_CryptoStreamEncrypt.Write(data, offset, count);
}
public byte[] Result
{
get
{
return m_HashAlgorithm.Hash;
}
}
最佳答案
在获取结果之前需要调用HashFinal
:
http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.hashfinal.aspx
根据散列算法的工作方式( block 密码),您无法获得准确的中间结果,因为它不会在数据中间正确计算 block 。这是因为它必须填充最终数据 block 以确保正确的值并保持加密“强”。换句话说,由于数据 block 依赖于先前的 block ,因此您需要所有数据才能生成正确的结果。 .NET 试图通过在最终确定之前拒绝访问密码结果来帮助您解决这个问题。您将所有数据提供给哈希,然后最终确定以获得正确计算的结果。
我会向您提出这个问题:为什么需要中间结果?您是否有可以从不同角度处理或解决的原因?告诉我们原因,我们也许可以提供替代方案。
您还应该注意在使用后正确关闭/处置您的流。
关于c# - 检索哈希值后使用 c# HashAlgorithm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18447870/
我正在尝试将充气城堡用于 DTLS 握手。 我按照 this link 生成了 key .我正在通过扩展 DefaultTlsClient 来工作。它可以生成client_hello 数据包。但是当
我无法得到关于这个问题的明确答案,所以这个问题。过去很少有 SO 帖子提到 HashAlgorithm 的实例在 MSDN 文档中不是线程安全的引用片段。 见 Why does SHA1.Comput
从 HashAlgorithm 派生的对象(例如 MD5CryptoServiceProvider)具有 Dispose() 方法,但它是私有(private)的。相反,它有一个 Clear() 方法
我有一个散列算法对象(在本例中为 SHA1),我向其提供数据,以便在调用 Result 属性时最终获得散列结果。 问题是一旦调用了 m_HashAlgorithm.Hash 属性,该对象就不能再用于喂
我需要独立计算多个数据 block 的哈希值。像这样: using( HashAlgorithm hasher = new ActualHashAlgorithm() ) { for( int
使用时 MD5CryptoServiceProvider我发现它可能需要处理,因为它继承自 HashAlgorithm实现 IDisposable 的类.然而,the example in the d
方法 HashAlgorithm.TransformBlock 接受参数 outputBuffer和 outputOffset . 我想不出这个方法有这些的原因。将散列数据复制到某个地方以至于该副本成
我有以下用例: 从一个文件中读取n个字节 计算这 n 个字节的 (MD5) 散列 从文件中读取下m个字节 为最多 n+m 字节的文件计算 (MD5) 哈希 增量散列文件不是问题,just call T
所以我想知道哈希算法的各种实现之间是否存在重大差异,以SHA系列算法为例。它们每个都有 3 个实现,1 个在托管代码中,2 个围绕不同的 native 加密 API 进行包装,但是使用它们之间有什么主
我似乎看到 SHA-2 以两种不同的方式完成。 是的,我知道 1 是“新的”(实例化的),而另一个是 Create 方法,但它似乎实现了相同的相同对象 HashAlgorithm sha2 = new
我需要在 C# 中使用 salt 对密码进行哈希处理。 salt是从一个来源获取的,类型是byte[],password是从另一个来源获取的,类型是String。 计算一个区 block 的哈希值非常
我想了解散列算法的工作原理,特别是 SHA3-512。为了了解它是如何工作的,我在 Google 中搜索了代码并找到了 Hashlib。 .该代码不起作用,因为我没有 Hashlib 库(不确定应该调
这两个代码块返回相同的东西吗?假设 arr 在两个例子中都是相同的 byte[]: 代码示例 1 HashAlgorithm a = HashAlgorithm.Create("SHA-256");
这两个代码块返回相同的东西吗?假设 arr 在两个例子中都是相同的 byte[]: 代码示例 1 HashAlgorithm a = HashAlgorithm.Create("SHA-256");
我正在使用 spymemcached 和 HashAlgorithm.KETAMA_HASH 连接到 5 个节点的 memcached 池。 我的理解是,当我们使用一致的哈希算法时,例如,当节点关闭时
HashAlgorithm.TransformBlock() 具有 outputBuffer 参数,该参数记录为 用于计算哈希码的输入数组部分的副本。 这听起来像是我的数据将被读取,用于更改哈希机制状
我有一个 ASP.Net MVC 项目,它在使用 HashAlgorithm 时运行良好,但我试图在 ASP.NET Core 2 中复制同一个项目,但出现以下错误: System.PlatformN
我是一名优秀的程序员,十分优秀!