PasswordHasher 算法
1 public override PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword) 2 { 3 string[] passwordProperties = hashedPassword.Split('|'); 4 if (passwordProperties.Length != 3) 5 { 6 return base.VerifyHashedPassword(hashedPassword, providedPassword); 7 } 8 else 9 { 10 string passwordHash = passwordProperties[0]; 11 int passwordformat = 1; 12 string salt = passwordProperties[2]; 13 if (String.Equals(EncryptPassword(providedPassword, passwordformat, salt), passwordHash, StringComparison.CurrentCultureIgnoreCase)) 14 { 15 return PasswordVerificationResult.SuccessRehashNeeded; 16 } 17 else 18 { 19 return PasswordVerificationResult.Failed; 20 } 21 } 22 } 23 24
25 private string EncryptPassword(string pass, int passwordFormat, string salt) 26 { 27 if (passwordFormat == 0)
28 return pass; 29 30 byte[] bIn = Encoding.Unicode.GetBytes(pass); 31 byte[] bSalt = Convert.FromBase64String(salt); 32 byte[] bRet = null; 33 34 if (passwordFormat == 1) 35 { // MembershipPasswordFormat.Hashed 36 HashAlgorithm hm = HashAlgorithm.Create("SHA1"); 37 if (hm is KeyedHashAlgorithm) 38 { 39 KeyedHashAlgorithm kha = (KeyedHashAlgorithm)hm; 40 if (kha.Key.Length == bSalt.Length) 41 { 42 kha.Key = bSalt; 43 } 44 else if (kha.Key.Length < bSalt.Length) 45 { 46 byte[] bKey = new byte[kha.Key.Length]; 47 Buffer.BlockCopy(bSalt, 0, bKey, 0, bKey.Length); 48 kha.Key = bKey; 49 } 50 else 51 { 52 byte[] bKey = new byte[kha.Key.Length]; 53 for (int iter = 0; iter < bKey.Length; ) 54 { 55 int len = Math.Min(bSalt.Length, bKey.Length - iter); 56 Buffer.BlockCopy(bSalt, 0, bKey, iter, len); 57 iter += len; 58 } 59 kha.Key = bKey; 60 } 61 bRet = kha.ComputeHash(bIn); 62 } 63 else 64 { 65 byte[] bAll = new byte[bSalt.Length + bIn.Length]; 66 Buffer.BlockCopy(bSalt, 0, bAll, 0, bSalt.Length); 67 Buffer.BlockCopy(bIn, 0, bAll, bSalt.Length, bIn.Length); 68 bRet = hm.ComputeHash(bAll); 69 } 70 } 71 72 return Convert.ToBase64String(bRet); 73 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器