gpt4 book ai didi

java - 与 Jasypt 和 SHA-256 一起使用的 Tomcat 领域

转载 作者:行者123 更新时间:2023-11-28 23:16:19 25 4
gpt4 key购买 nike

我创建了新用户,他们可以使用 Jasypt 对密码进行哈希处理来登录我的 Java EE 应用程序:我使用 SHA-256、8 字节盐、1000 次迭代并在数据库中获得 80 个字符的十六进制哈希。这是工作。这是代码:

ConfigurablePasswordEncryptor passwordEncryptor = new ConfigurablePasswordEncryptor();
SimpleDigesterConfig config = new SimpleDigesterConfig();
config.setAlgorithm( "SHA-256" );
config.setIterations( 1000 );
config.setSaltSizeBytes( 8 );
passwordEncryptor.setConfig( config );
passwordEncryptor.setPlainDigest( false );
passwordEncryptor.setStringOutputType( "hexadecimal" );
String hashedPassword = passwordEncryptor.encryptPassword( password );

然后我将它存储在数据库中。

现在,在我的 DataSource 领域,我正试图告诉 Tomcat 我在做什么,就像这样:

<Realm 
className="org.apache.catalina.realm.DataSourceRealm"
name="monRealm"
dataSourceName="jdbc/postgres"
localDataSource="true"
userTable="users" userNameCol="login" userCredCol="password"
userRoleTable="user_roles" roleNameCol="role_name"
debug="99">

<CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler"
algorithm="SHA-256"
iterations="1000"
keyLength="256"
saltLength="8"
/>

</Realm>

在我看来,这是一回事。并且 Realm 应该检查密码就好了。

但我从来没有设法使用我创建的登录名/密码登录。它在没有散列部分的情况下工作,所以这确实是我散列错误密码的方式。但我看不出我遗漏了什么。

在此先感谢您的帮助!

最佳答案

您几乎肯定必须处理从您的 ConfigurablePasswordEncryptor 中传出的信息。

尝试运行这个命令。您可以看到 Tomcat 如何期望在用户数据库中格式化存储的凭据:

$CATALINA_BASE/bin/digest.sh -a SHA-256 -i 1000 -s 8 'test password'`
test password:d2ff2cb07d35c790$1000$13a74a8c198db73981f0a596c1e21421596afd0ca446dfb857d3c524604e8781

请注意,“测试密码”是经过哈希处理的,但存储的凭据还存储了盐值和所使用的哈希迭代次数。如果 ConfigurablePasswordEncryptor 没有以相同的方式格式化其输出,您将需要安排它发生。

还有另一种选择:您可以通过实现您自己的 CredentialHandler 来安排 Tomcat 使用您自己的凭据处理代码。查看此演示文稿 how to write your own CredentialHandler .请参阅幻灯片 21-22 和 33-39。实际上,通读整篇文章,但如果您想使用完全相同的代码来生成验证您存储的密码,这些幻灯片应该能够帮助您入门。

关于java - 与 Jasypt 和 SHA-256 一起使用的 Tomcat 领域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48913159/

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