在登录期间比较salt和散列密码似乎不正常

ACP*_*ACP 0 passwords asp.net-mvc hash comparison salt

我在用户注册期间存储了密码的salt和hash值...但是在登录期间我然后对用户给出的密码进行加密和散列,会发生什么是新的盐并生成新的哈希....

string password = collection["Password"];
reg.PasswordSalt = CreateSalt(6);
reg.PasswordHash = CreatePasswordHash(password, reg.PasswordSalt);
Run Code Online (Sandbox Code Playgroud)

这些陈述都在注册和登录....

注册期间的盐和哈希是eVSJE84W18DE22FED8C378DB7716B0E4B6C0BA54167315A2

在登录期间它是4YDIeARH12E3C1F4F4CFE04EA973D7C65A09A78E2D80AAC7.....任何建议....

    public static string CreateSalt(int size)
    {
        //Generate a cryptographic random number.
        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
        byte[] buff = new byte[size];
        rng.GetBytes(buff);

        // Return a Base64 string representation of the random number.
        return Convert.ToBase64String(buff);
    }

    public static string CreatePasswordHash(string pwd, string salt)
    {
        string saltAndPwd = String.Concat(pwd, salt);
        string hashedPwd =
         FormsAuthentication.HashPasswordForStoringInConfigFile(
         saltAndPwd, "sha1");

        return hashedPwd;
    }
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 5

现在,您在注册和登录时生成不同的盐.您需要使用相同的盐进行散列,否则您将获得不同的哈希值.也就是说,您需要将salt与密码一起存储到数据库中,并在用户稍后尝试登录时重新使用它进行哈希处理.

脚步:

  1. 用户注册并提供纯文本密码
  2. 您生成一个新的随机盐并使用它来散列纯文本
  3. 您将salt和哈希存储到数据库中
  4. 稍后,用户尝试通过提供新的纯文本密码进行登录.您从数据库中获取哈希和salt
  5. 您使用salt来散列纯文本
  6. 比较两个哈希值

  • 不,你仍然需要在表中...但你需要实际上*以后使用它们,而不仅仅是哈希.使用salt,在散列过程中将其应用于用户提供的密码,然后将其与存储的散列进行比较.不要为每次登录生成盐,仅用于注册. (2认同)