标签: hashalgorithm

为什么ComputeHash没有确定性地行动?

我遇到了一个有趣的问题..似乎ComputeHash()对于"HMACSHA256"哈希不是确定性的行为..如果我使用HashAlgorithm.Create("HMACSHA256")创建两个HashAlgorithm实例..并运行ComputeHash,我得到两个不同的结果..下面是一个展示这种行为的示例静态类.

internal static string HashPassword(byte[] bAll)
{
    using (HashAlgorithm s = HashAlgorithm.Create("HMACSHA256"))
    {
        return Convert.ToBase64String(s.ComputeHash(bAll));
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试使调用非静态(实际上它开始非静态,我有双重和三重四重四重检查我的输入数组..它在每次调用时绝对相同..我甚至在immidiate中做过的事情窗口像:

Convert.ToBase64String(HashAlgorithm.Create("HMACSHA256").ComputeHash(bAll)
Run Code Online (Sandbox Code Playgroud)

并通过方法中的断点在immidiates窗口中运行两次返回两个不同的哈希值.

我知道哈希被认为是确定性的.那么是什么给出了什么呢?在调试器中运行是怎么回事?还是其他任何想法?真的,现在这只是两个奇怪的词:-P ..

谢谢乔希

.net c# hmac hashalgorithm

12
推荐指数
2
解决办法
2895
查看次数

是否可以复制.NET HashAlgorithm(用于重复的增量散列结果)?

我有以下用例:

  • 从文件中读取n个字节
  • 计算这些n个字节的(MD5)哈希值
  • 从文件中读取下一个m字节
  • 计算(MD5)哈希,文件最多为n + m个字节

增量散列文件不是问题,只需调用TransformBlockTransformFinalBlock.

问题是我需要多个哈希的数据共享它的起始字节,但在我调用TransformFinalBlock读取Hash第一个n字节后,我不能继续使用相同的对象进行哈希并需要一个新的字节.

在搜索问题时,我发现PythonOpenSSL都可以选择复制散列对象,以实现此目的:

hash.copy()

返回哈希对象的副本("克隆").这可以用于有效地计算共享公共初始子字符串的字符串的摘要.

 

EVP_MD_CTX_copy_ex()可用于将消息摘要状态从in复制到out.如果要散列的大量数据仅在最后几个字节中有所不同,这非常有用.必须在调用此函数之前初始化out.

正如我可能搜索的那样,我找不到任何包含库存C#HashAlgorithm的东西,它允许我调用它的方法之前有效地Clone()= =复制这样的对象- 然后继续用克隆散列其余的数据.TransformFinalBlock

我找到了一个MD5C#参考实现,可以简单地适应支持克隆(*),但是我更倾向于使用那些而不是将这样的东西引入代码库.

(*)实际上,据我所知,任何哈希算法(与加密/解密相反)我都很难检查,因为这种算法所具有的所有状态都是一种摘要形式.

所以我在这里遗漏了一些东西,或者标准的C#/ .NET接口实际上是不是提供了复制哈希对象的方法?


另一个数据点:

微软自己加密服务原生API 有一个功能CryptDuplicateHash,其中的文档状态,引用:

CryptDuplicateHash函数可用于创建以相同内容开头的两个不同内容的单独哈希.

自Windows XP以来一直存在.: - |


注意wrt.MD5:用例不具有加密敏感性.只是可靠的文件校验和.

c# md5 clone hashalgorithm

11
推荐指数
1
解决办法
846
查看次数

.NET:处理HashAlgorithm对象

从HashAlgorithm派生的对象(如MD5CryptoServiceProvider)具有Dispose()方法,但它是私有的.相反,它有一个Clear()方法,它"释放它所使用的所有资源".

WTF?

这是如何正确处理HashAlgorithm的呢?

var hasher = new MD5CryptoServiceProvider();

byte[] hashCode = hasher.ComputeHash(data);

hasher.Clear();
Run Code Online (Sandbox Code Playgroud)

有人想向我解释这个吗?:)

.net hashalgorithm

5
推荐指数
2
解决办法
2603
查看次数

如何在C#中将CRC32计算为有符号整数?

我是一名PHP开发人员,并且在C#中有点偏离我的元素.在PHP中,有一个crc32()函数,它为您传入的任何字符串返回有符号整数.

所以这就是我习惯的:

<?php
echo crc32("test");
// displays -662733300
Run Code Online (Sandbox Code Playgroud)

我想在C#中做同样的事情.我遇到了这个C#类库,但对它几乎一无所知.根据他的指示,我应该这样做:

// first convert string to byte-array
String input = "test";
byte[] bytes = new byte[input.length * sizeof(char)];
System.Buffer.BlockCopy(input.ToCharArray(), 0, bytes, 0, bytes.Length);

// then calculate the value
Crc32 crc32 = new Crc32();
String output = "";
foreach (byte b in crc32.ComputeHash(bytes))
{
    output += b.ToString("x2").ToLower();
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个输出字符串27d86d6a.我需要做什么来返回有符号整数?(在这个例子中应该相同-662733300)

c# hash crc32 hashalgorithm

4
推荐指数
1
解决办法
2万
查看次数

Hashlib和System.Security.Cryptography.HashAlgorithm之间的区别

我试图了解散列算法的工作原理,特别是SHA3-512.为了了解它是如何工作的,我在Google中搜索了代码并遇到了Hashlib.代码不起作用,因为我没有Hashlib库(不确定应该调用它).我怎样才能得到它,这是在C#中应用SHA3-512的唯一方法吗?

我想知道一些基本的东西,

  1. 什么是Hashlib

  2. 它是图书馆吗?

  3. 是的输出结果/工作流程/功能HashlibSystem.Security.Cryptography.HashAlgorithm一样吗?如果没有,那么它们之间有什么区别?

编辑:很抱歉从中间删除几个问题.因为我觉得他们不再需要在这里展示了.

c# hashalgorithm hashlib

1
推荐指数
1
解决办法
5860
查看次数

标签 统计

hashalgorithm ×5

c# ×4

.net ×2

clone ×1

crc32 ×1

hash ×1

hashlib ×1

hmac ×1

md5 ×1