Generated password hashes are always followed by a '=='
在我的应用程序中,我有一个类可以散列密码并生成盐。出于某种原因,每个哈希似乎总是以双等号(==)结尾。
我做错什么了吗?这些哈希值不安全吗?
应用程序在C和ASP.NET中,生成盐和哈希的代码如下…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public class PasswordService : IPasswordService { private static RandomNumberGenerator random = RandomNumberGenerator.Create(); public string HashPassword(string salt, string password) { Rfc2898DeriveBytes hasher = new Rfc2898DeriveBytes(password, Convert.FromBase64String(salt), 10000); byte[] hash = hasher.GetBytes(64); return Convert.ToBase64String(hash); } public bool VerifyPasswordHash(string salt, string password, string hash) { return HashPassword(salt, password) == hash; } public string GenerateSalt() { int max_length = 32; byte[] salt=new byte[max_length]; random.GetBytes(salt); return Convert.ToBase64String(salt); } } |
谢谢您!
当然,它将以==结尾,您正在编码到base64!:)base64中的所有内容都以==结尾。