试图理解散列函数,我似乎无法理解为什么在其中使用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);
}
答案 0 :(得分:1)
Buffer.BlockCopy()
是一种更快速的数组复制方式。
在您的代码中,它是从salt
和subkey
复制到outputBytes
。
答案 1 :(得分:1)
此代码连接0
字节(对于版本),salt和哈希。它相当于:
new byte[]{0}.Concat(salt).Concat(subkey).ToArray()
但它更快,并留下更少的垃圾。