如何向现有散列中添加值

本文关键字:添加 | 更新日期: 2023-09-27 18:09:15

例如,我使用:

        protected string hexHashMD5(byte[] filePart) {
        // Now that we have a byte array we can ask the CSP to hash it
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] result = md5.ComputeHash(filePart);
        // Build the final string by converting each byte
        // into hex and appending it to a StringBuilder
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < result.Length; i++) {
            sb.Append(result[i].ToString("X2"));
        }
        // And return it
        return sb.ToString();
    }

并将其输出存储到程序中的字符串变量中。我怎么能把哈希并添加另一个字节[]来创建一个新的哈希?

有人告诉我,你可以使用文件流,每次自动流式传输一个比特,并进行完整的哈希,但是当我需要将两个单独的文件哈希在一起时会发生什么?

如何向现有散列中添加值

您可以创建一个自定义的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;