gpt4 book ai didi

java - Apache Shiro - 密码格式问题

转载 作者:行者123 更新时间:2023-12-02 05:17:14 26 4
gpt4 key购买 nike

我尝试将PasswordMatcher与DefaultPasswordService和DefaultHashService一起使用。

DefaultHashService hashService = new DefaultHashService();
hashService.setHashIterations(10000);
hashService.setHashAlgorithmName(Sha512Hash.ALGORITHM_NAME);
hashService.setGeneratePublicSalt(true);

DefaultPasswordService passwordService = new DefaultPasswordService();
passwordService.setHashService(hashService);
String encryptedPassword = passwordService.encryptPassword("password");
System.out.println("Result:"+encryptedPassword);

这是我必须保存到数据库“密码”列中的结果。

$shiro1$SHA-512$10000$T5nkQEA3qjMLPuB/x+WN4Q==$qWViYjBljsMwH7FSvhecKlxQqXY11lv8eS4guxD9t8D4HTeKclN/muyTnhzYZ+YvI1YkEg6L7T2kM3qykUG0XQ==

一切正常。然而我的问题是为什么迭代次数和算法名称与盐和密码一起保存?在这种情况下,我们确实会通知潜在的攻击者,他们会转储我们的数据库有关此类重要属性的信息。

最佳答案

如今,我们的目标是保护用户密码,即使攻击者知道所有实现 secret 。这称为“white-box encryption ”:

In such a context, a ‘white-box attacker’ has full access to the software implementation of a cryptographic algorithm: the binary is completely visible and alterable by the attacker; and the attacker has full control over the execution platform (CPU calls, memory registers, etc.). Hence, the implementation itself is the sole line of defence.

话虽这么说,您可以将哈希算法和迭代计数与密码一起存储,因为您必须假设攻击者无论如何也有权访问代码/二进制文件(如果他们有权访问数据库,则这不太可能) .

将迭代次数与哈希值一起存储还有一个额外的好处:将来您可能希望更改为更大的迭代次数,因为处理能力有所提高。然后,您可以通过使用旧迭代次数检查所有哈希,应用多次额外迭代并将新结果存储在数据库中,升级到更安全的方案,轻松升级数据库。

同样,如果您将哈希算法添加到哈希中,您以后可以轻松更改为其他密码方案(bcrypt,...),并在用户下次登录时优雅地升级用户。

关于java - Apache Shiro - 密码格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26821993/

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