Glassfish 4 中的密码加密算法

Posted

技术标签:

【中文标题】Glassfish 4 中的密码加密算法【英文标题】:Password Encryption Algorithm in Glassfish 4 【发布时间】:2014-05-08 23:44:51 【问题描述】:

我最近将 Glassfish 从 3.1.2 更新到 4.0,并想设置一个我之前在我的应用程序上使用的 JDBCRealm,它使用基于 FORM 的身份验证。密码在数据库中使用 SHA-256 进行哈希处理(这是默认的摘要算法选项)。

领域具有在此 Glassfish 版本中成为必需的属性:密码加密算法。令人难以置信的是,Glassfish 官方文档说它是可选的,并且输入字段下的注释说将其留空是有风险的,但是您不能将其留空,因为它是强制性的。

无论我在此属性中设置什么,我都无法登录之前运行的应用程序。 (这对新注册用户和老用户都是如此。)我在谷歌上搜索了好几天,但找不到该字段的选项。有哪些选择?

另外,我将 Glassfish 与 mysql 一起使用。 Glassfish 是否将加密的散列密码发送到数据库,或者只是对 MySQL 的一些指令,以使用这种加密存储散列密码?

This question 对我有所帮助,但没有解决我的问题。

更新:实际上,我不使用经典的基于 FORM 的身份验证,而是使用 HttpServletRequest#login() 进行编程登录的自定义 JSF 表单,但我认为这在这个问题上并不重要。

【问题讨论】:

你试过“无”吗? 【参考方案1】:

我已经使用 Glassfish 4.1 和为 MySQL 配置的 JDBC 领域测试了一个简单的用例。

你可以建立一个简单的用户表:

name:存储用户名 password:存储用户密码的SHA-256哈希 密码(不加盐) group:存放用户组(即admin、user)

INSERT INTO users (name, password, group) VALUES ("admin", SHA2("password", 256), "admins"); 

在管理控制台中,转到配置 > 安全 > 领域并编辑您的领域。

在“密码加密算法”字段中输入“AES”。

在“摘要算法”字段中输入“SHA-256”。

在“字符集”字段中输入“UTF-8”。

【讨论】:

对我不起作用。我的日志说:Severe: jdbcrealm.invaliduserWarning: WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Security Exception。已经尝试解决了几个小时,尝试了几种不同的密码加密算法组合等。

以上是关于Glassfish 4 中的密码加密算法的主要内容,如果未能解决你的问题,请参考以下文章

浅析加密算法七RSA密码

浅析加密算法四Hill密码

浅析加密算法六AES密码

简单的加密算法——维吉尼亚密码

DES加密算法原理

浅析加密算法五DES密码