Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何向现有哈希添加值?_C#_Hash - Fatal编程技术网

C# 如何向现有哈希添加值?

C# 如何向现有哈希添加值?,c#,hash,C#,Hash,例如,我使用以下方法执行“hashable”的MD5: 受保护字符串hexHashMD5(字节[]文件部分){ //现在我们有了一个字节数组,我们可以要求CSP对其进行散列 MD5 MD5=新的MD5CryptoServiceProvider(); 字节[]结果=md5.ComputeHash(filePart); //通过转换每个字节来构建最终字符串 //转换为十六进制并将其附加到StringBuilder StringBuilder sb=新的StringBuilder(); for(int

例如,我使用以下方法执行“hashable”的MD5:

受保护字符串hexHashMD5(字节[]文件部分){
//现在我们有了一个字节数组,我们可以要求CSP对其进行散列
MD5 MD5=新的MD5CryptoServiceProvider();
字节[]结果=md5.ComputeHash(filePart);
//通过转换每个字节来构建最终字符串
//转换为十六进制并将其附加到StringBuilder
StringBuilder sb=新的StringBuilder();
for(int i=0;i
并将其输出存储到程序中的字符串变量中。如何获取该散列并添加另一个字节[]以创建新的散列


有人告诉我,您可以使用file stream,一次自动流一点,并进行完整的哈希,但是当我需要将两个单独的文件哈希在一起时会发生什么情况?

您可以创建一个自定义的
类,该类按顺序读取两个流,然后将其传递给
ComputeHash

或者,您可以一次读取一个块的两个流,并将每个块传递给
TransformBlock

byte[] buffer = new byte[4096];
while (true) {
    int read = stream1.Read(buffer, 0, buffer.Length);
    if (read == 0) break;
    hash.TransformBlock(buffer, 0, read, null, 0);
}

while (true) {
    int read = stream2.Read(buffer, 0, buffer.Length);
    if (read == 0) break;
    hash.TransformBlock(buffer, 0, read, null, 0);
}

hash.TransformFinalBlock(new byte[0], 0, 0);
var hashCode = hash.Hash;

什么?您想计算md5(a concat b)还是md5(a)concat md5(b)?我需要计算字节[]b=字节[4096]散列,然后连接字节[]c=字节[4096],最多2118次(到目前为止)。结果只有1个散列。是的
TransformBlock
对于这样的东西真的很方便。这看起来可能有用,但我遇到的问题更多的是我有一个大文件(超过4GB,目前为8.5 GB),并且我在尝试一次性散列文件时遇到内存问题。最后,变量hash在代码中代表什么,或者在包含某个对象时它是默认值吗?一位同事提到,您可以“附加到”或“顺序创建”散列。因此,添加到现有哈希的初始问题是。@詹姆斯:这段代码一次只能在内存中加载4K。这是如何按顺序构建哈希。@SLaks:不过,哈希变量代表什么?我看没有申报。呃,去吧,这是什么类型的物体?没关系,我今天早上启动VS后就知道了。每个哈希算法都有TransformBlock选项。
byte[] buffer = new byte[4096];
while (true) {
    int read = stream1.Read(buffer, 0, buffer.Length);
    if (read == 0) break;
    hash.TransformBlock(buffer, 0, read, null, 0);
}

while (true) {
    int read = stream2.Read(buffer, 0, buffer.Length);
    if (read == 0) break;
    hash.TransformBlock(buffer, 0, read, null, 0);
}

hash.TransformFinalBlock(new byte[0], 0, 0);
var hashCode = hash.Hash;