首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Java代码中计算与SHA-256Tomcat8 DataSourceRealm兼容的哈希?

如何在Java代码中计算与SHA-256Tomcat8 DataSourceRealm兼容的哈希?
EN

Stack Overflow用户
提问于 2015-01-17 07:32:26
回答 2查看 3K关注 0票数 2

我正在使用带有JDK 1.8.0_25的Tomcat8.0.17。我使用Derby作为数据库。

我有一个使用SHA-256摘要的DataSourceRealm来处理表单身份验证。

我的$WEBAPP/META-INF/context.xml如下所示:

代码语言:javascript
运行
复制
<Context> 
  <ResourceLink global="jdbc/demo" name="jdbc/demo" type="javax.sql.DataSource" />
  <Realm className="org.apache.catalina.realm.DataSourceRealm"
         digest="SHA-256"
         dataSourceName="jdbc/demo"
         userTable="users" userNameCol="user_name" userCredCol="user_pass"
         userRoleTable="user_roles" roleNameCol="role_name"/>
</Context> 

当使用Tomcat附带的摘要工具时,我可以使用摘要工具的输出手动更新数据库中的users.user_pass列,一切都会正常工作(注意-s 0,因为Tomcat不能使用加盐的散列):

代码语言:javascript
运行
复制
C:\>"%CATALINA_HOME%\bin\digest" -a SHA-256 -s 0 hotdog
hotdog:$1$35602208e86ac7d6b3a63780a9538a9d1763a646d5b9f3930a0548e0983e0ca6

...

ij> update users set user_pass='$1$35602208e86ac7d6b3a63780a9538a9d1763a646d5b9f3930a0548e0983e0ca6' where user_name='demouser';
1 row inserted/updated/deleted

现在我可以成功登录了。

现在,如何以编程方式(在Java中)生成SHA-256散列密码以插入到数据库中?我见过许多生成SHA-256散列并将字节字符串转换为十六进制的示例。但是,在使用摘要工具时,让我感到困惑的是散列的开始。它总是生成以'$‘开头的哈希。当以编程方式转换散列并以十六进制编码时,输出中永远不会包含'$‘字符(因为十六进制中没有'$’,只有0-F)。但是Tomcat似乎可以很好地处理摘要工具输出(包括美元符号)。

EN

回答 2

Stack Overflow用户

发布于 2015-11-24 10:06:57

消化器的结果以以下格式显示:

摘要密码:salt$iterations$

例如,密码"1234",20个字符的盐和10次迭代将产生:

1234:d83beb29c66cd2f021a469875ffd4c608c25d855$10$eab99fbeedfd7d01b94cd3cf8484a99ad671726faa3e5d48c0699b489aa35658

票数 3
EN

Stack Overflow用户

发布于 2015-01-17 07:56:04

我刚刚测试了它,我猜Tomcat只是从摘要工具输出中去掉了直到第二个美元符号的所有东西。因此,我可以使用Apache Commons在Java中生成SHA-256散列十六进制字符串:

代码语言:javascript
运行
复制
String sha256hex = org.apache.commons.codec.digest.DigestUtils.sha256Hex(password);  

编辑:那么,摘要工具生成的散列字符串中的“$”符号的意义是什么?我猜是和盐有关吧?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27994444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档