我是C#的新手,这是我在这里的第一个问题,所以我提前为任何失礼道歉.
语境:
当用户注册时,我调用CreateSaltedHash()方法并从文本字段中传递用户输入的密码.在将密码存储在User表的Password列中之前,此方法会对密码进行加密和哈希处理.
题:
当用户尝试登录时,我该如何验证密码?
如果我再次调用CreateSaltedHash()方法,由于随机盐,它将不匹配.
我应该将盐储存在单独的栏中吗?我应该在生成盐渍哈希时使用分隔符吗?根据盐渍和散列密码验证输入密码的最安全方法是什么?
代码: 这是我到目前为止所拥有的.
public class PasswordHash
{
public const int SALT_BYTES = 32;
/*
* Method to create a salted hash
*/
public static byte[] CreateSaltedHash(string password)
{
RNGCryptoServiceProvider randromNumberGenerator = new RNGCryptoServiceProvider();
byte[] salt = new byte[SALT_BYTES];
randromNumberGenerator.GetBytes(salt);
HashAlgorithm hashAlgorithm = new SHA256Managed();
byte[] passwordByteArray = Encoding.UTF8.GetBytes(password);
byte[] passwordAndSalt = new byte[passwordByteArray.Length + SALT_BYTES];
for (int i = 0; i < passwordByteArray.Length; i++)
{
passwordAndSalt[i] = passwordByteArray[i];
}
for (int i = 0; …Run Code Online (Sandbox Code Playgroud)