实际上,对于字符串转换来说,这有点奇怪-
成员资格提供程序所做的就是将其放入配置文件中。哈希和盐是二进制Blob,除非要将它们放入文本文件,否则无需将它们转换为字符串。
在我的《Beginning ASP.NET
Security》一书中(最后,借口是这本书的借口),我执行以下 *** 作
static byte[] GenerateSaltedHash(byte[] plainText, byte[] salt){ HashAlgorithm algorithm = new SHA256Managed(); byte[] plainTextWithSaltBytes = new byte[plainText.Length + salt.Length]; for (int i = 0; i < plainText.Length; i++) { plainTextWithSaltBytes[i] = plainText[i]; } for (int i = 0; i < salt.Length; i++) { plainTextWithSaltBytes[plainText.Length + i] = salt[i]; } return algorithm.ComputeHash(plainTextWithSaltBytes); }
Encoding.UTF8.GetBytes(string)。如果必须将哈希转换为字符串表示形式,则可以使用
Convert.Tobase64String并将
Convert.Frombase64String其转换回。
您应该注意,不能在字节数组上使用相等运算符,它会检查引用,因此您应该简单地遍历两个数组,检查每个字节,从而
public static bool CompareByteArrays(byte[] array1, byte[] array2){ if (array1.Length != array2.Length) { return false; } for (int i = 0; i < array1.Length; i++) { if (array1[i] != array2[i]) { return false; } } return true;}
始终 为每个密码使用新的盐。盐不必保密,可以与哈希表本身一起存储。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)