解决方法
我们前一段时间讨论过关于密码的最佳实践,你可能会在那里找到一些好主意:
Salting Your Password: Best Practices?
我发现最简单的一个,虽然仍然相当安全,但是使用GUID作为你的盐.它是随机的,足够长.如果您包含GUID的字符串格式(‘{‘和’ – ‘字符),则效果最佳,但您不必这样做.
请记住,盐对于每个盐渍物品必须是唯一的,并且为了最安全,您应该使用加密安全随机数生成器.还要记住,您必须将盐与密码一起存储,否则您将无法根据哈希版本检查纯文本版本!如果您愿意,可以存储未加密的盐;我通常将它放在与密码相同的表中的字段中.盐的目的不是保持隐藏,而是让彩虹表难以(希望不可能)及时计算.
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); byte[] buffer = new byte[1024]; rng.GetBytes(buffer); string salt = BitConverter.ToString(buffer); var saltedPassword = password + salt;
要么…
var salt = Guid.NewGuid().ToString(); var saltedPassword = password + salt;