为什么在散列函数中使用BlockCopy()?

时间:2013-01-08 16:50:36

标签: .net hash-function

试图理解散列函数,我似乎无法理解为什么在其中使用BlockCopy。

public static string HashPassword(string password)
        {
            if (password == null)
            {
                throw new ArgumentNullException("password");
            }

            // Produce a version 0 (see comment above) password hash.
            byte[] salt;
            byte[] subkey;
            using (var deriveBytes = new Rfc2898DeriveBytes(password, SaltSize, PBKDF2IterCount))
            {
                salt = deriveBytes.Salt;
                subkey = deriveBytes.GetBytes(PBKDF2SubkeyLength);
            }

            byte[] outputBytes = new byte[1 + SaltSize + PBKDF2SubkeyLength];
            Buffer.BlockCopy(salt, 0, outputBytes, 1, SaltSize);
            Buffer.BlockCopy(subkey, 0, outputBytes, 1 + SaltSize, PBKDF2SubkeyLength);
            return Convert.ToBase64String(outputBytes);
        }

2 个答案:

答案 0 :(得分:1)

使用基元时,

Buffer.BlockCopy()是一种更快速的数组复制方式。

在您的代码中,它是从saltsubkey复制到outputBytes

答案 1 :(得分:1)

此代码连接0字节(对于版本),salt和哈希。它相当于:

new byte[]{0}.Concat(salt).Concat(subkey).ToArray()

但它更快,并留下更少的垃圾。