【发布时间】:2014-02-21 12:17:25
【问题描述】:
这是一个相当理论的问题。假设您有一个要从中派生主密钥的密码。首先使用 SHA256 对密码进行哈希处理是否安全,将计算的字节解析并截断为整数,然后使用模运算符,使其包含在一个范围内(即 1000-3000),并将该整数用作 Rfc2898DeriveBytes 中的参数。网络?
这样做的主要目标是使迭代计数可变。这样做是否会丢失任何熵?
这是用于随机化迭代计数的 C# 代码:
#region Constant Definitions
private const int HASH_SIZE = 512;
private const int ITERATIONS_LOWER_BOUND = 1000;
private const int ITERATIONS_UPPER_BOUND = 2500; //must exceed lower bound
private const uint SALT_SIZE = 256;
#endregion
public static int RandomizeIteration(byte[] Key) {
if (ITERATIONS_UPPER_BOUND <= ITERATIONS_LOWER_BOUND) {
throw new ArgumentOutOfRangeException("Iteration parameters are incorrectly configured.");
}
//Hash the key using SHA256 algorithm
byte[] HashedKey = SHA256.ComputeHash(Key);
long HashSum = Math.Abs((BitConverter.ToInt64(HashedKey, 0)));
Console.WriteLine("Iterations: " + (HashSum % (ITERATIONS_UPPER_BOUND - ITERATIONS_LOWER_BOUND) + ITERATIONS_LOWER_BOUND));
return (int) (HashSum % (ITERATIONS_UPPER_BOUND - ITERATIONS_LOWER_BOUND) + ITERATIONS_LOWER_BOUND);
}
【问题讨论】:
标签: c# .net security encryption hash