博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PasswordHasher
阅读量:5748 次
发布时间:2019-06-18

本文共 2331 字,大约阅读时间需要 7 分钟。

namespace Microsoft.AspNet.Identity{	public class PasswordHasher : IPasswordHasher	{		public virtual string HashPassword(string password)		{			return Crypto.HashPassword(password);		}		public virtual PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword)		{			if (Crypto.VerifyHashedPassword(hashedPassword, providedPassword))			{				return PasswordVerificationResult.Success;			}			return PasswordVerificationResult.Failed;		}	}}
using System;using System.Runtime.CompilerServices;using System.Security.Cryptography;namespace Microsoft.AspNet.Identity{	internal static class Crypto	{		private const int PBKDF2IterCount = 1000;		private const int PBKDF2SubkeyLength = 32;		private const int SaltSize = 16;		public static string HashPassword(string password)		{			if (password == null)			{				throw new ArgumentNullException("password");			}			byte[] salt;			byte[] bytes;			using (Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, 16, 1000))			{				salt = rfc2898DeriveBytes.Salt;				bytes = rfc2898DeriveBytes.GetBytes(32);			}			byte[] array = new byte[49];			Buffer.BlockCopy(salt, 0, array, 1, 16);			Buffer.BlockCopy(bytes, 0, array, 17, 32);			return Convert.ToBase64String(array);		}		public static bool VerifyHashedPassword(string hashedPassword, string password)		{			if (hashedPassword == null)			{				return false;			}			if (password == null)			{				throw new ArgumentNullException("password");			}			byte[] array = Convert.FromBase64String(hashedPassword);			if (array.Length != 49 || array[0] != 0)			{				return false;			}			byte[] array2 = new byte[16];			Buffer.BlockCopy(array, 1, array2, 0, 16);			byte[] array3 = new byte[32];			Buffer.BlockCopy(array, 17, array3, 0, 32);			byte[] bytes;			using (Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, array2, 1000))			{				bytes = rfc2898DeriveBytes.GetBytes(32);			}			return Crypto.ByteArraysEqual(array3, bytes);		}		[MethodImpl(MethodImplOptions.NoOptimization)]		private static bool ByteArraysEqual(byte[] a, byte[] b)		{			if (object.ReferenceEquals(a, b))			{				return true;			}			if (a == null || b == null || a.Length != b.Length)			{				return false;			}			bool flag = true;			for (int i = 0; i < a.Length; i++)			{				flag &= (a[i] == b[i]);			}			return flag;		}	}}

转载地址:http://vihzx.baihongyu.com/

你可能感兴趣的文章
OpenMediaVault 搭建git,ssh无法连接问题
查看>>
java多线程之:Java中的ReentrantLock和synchronized两种锁定机制的对比 (转载)
查看>>
【Web动画】SVG 实现复杂线条动画
查看>>
使用Wireshark捕捉USB通信数据
查看>>
《树莓派渗透测试实战》——1.1 购买树莓派
查看>>
Apache Storm 官方文档 —— FAQ
查看>>
iOS 高性能异构滚动视图构建方案 —— LazyScrollView
查看>>
Java 重载、重写、构造函数详解
查看>>
【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏
查看>>
【云栖大会】探索商业升级之路
查看>>
HybridDB实例新购指南
查看>>
C语言及程序设计提高例程-35 使用指针操作二维数组
查看>>
华大基因BGI Online的云计算实践
查看>>
深入理解自定义Annotation,实现ButterKnif小原理
查看>>
排序高级之交换排序_冒泡排序
查看>>
Cocos2d-x3.2 Ease加速度
查看>>
[EntLib]关于SR.Strings的使用办法[加了下载地址]
查看>>
中小型网站架构分析及优化
查看>>
写shell的事情
查看>>
负载均衡之Haproxy配置详解(及httpd配置)
查看>>