gpt4 book ai didi

java - 散列密码和加盐密码并不总是相同的

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:59 24 4
gpt4 key购买 nike

我在我的 Spring 应用程序中使用 Apache Shiro 作为我的安全层,我遇到了一个非常奇怪的情况。

首先,我的安全系统是这样设置的。当用户注册时,他们的密码会使用安全生成的随机盐进行哈希处理。然后将盐和散列密码存储在我的数据库中。当他们注册和登录时,一切都 100% 正常,但几天过去了,他们的散列密码突然不再匹配。这是我的代码:

import org.apache.shiro.codec.Base64;
import org.apache.shiro.crypto.hash.Sha256Hash;

public static void main(String[] args) {
String plainPassword = "testing";
String salt = "8AFTpriREtydSg39+37rQHNRyvZLuXqyXYgWXI55f1PbhbUQSeFGCLKsHpA6thZKs3uQeNNJHksqcV5oaNcr9lQiXMMyC8Duqr2aQaqyjLKpNMVlB69jJ7emNq0K6ccfBdv/O4JGT2U689LeNg6CqN+9kqW2GBgT2CIVOlapA34=";

System.out.println(new Sha256Hash(plainPassword.toCharArray(), Base64.decode(salt), 1024).toBase64());
}

生成的散列密码是:

b8VLt/eKV8F5kwDjRgdkM+PAvQC8sk7Ooflt91juaXA= 

但是我在数据库中的密码是:

xZNBNlUa8vRQq0qY5bbkETzZtzztGRTH2KZKijQdilU=

所以你可以想象,我完全被难住了。有谁知道我做错了什么?或者如果我离开了一步。

更新 1:在我的系统中注册一个新用户后,系统中的所有其他用户似乎都出于某种原因更改了密码。所以这与密码哈希的生成方式无关,更多的是与我的数据库访问层有关。

最佳答案

您的问题似乎与散列和加盐无关。您正在发送不正确的查询来更新不需要的记录。

但是我会提出一个关于加盐的建议——为每个用户使用不同的盐。否则您的密码不那么安全。想象一下,如果有人获得盐和您的数据库会发生什么。过一段时间(可能是几周,但不会太长)他将能够生成彩虹表并获得你的大部分密码。而如果你使用不同的盐,他将不得不生成与你的用户数量一样多的彩虹表。

关于java - 散列密码和加盐密码并不总是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5832013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com