创建 db 连接时需要发送散列或加密密码,请参阅以下详细信息:
我们有一个连接到 DB2 AS400 数据库的 Spring 应用程序。我们目前正在使用配置文件(.properties)来存储连接详细信息,Spring 在上下文创建阶段读取这些文件并相应地创建数据源。
...
database.driverClassName=com.ibm.as400.access.AS400JDBCDriver
database.url=jdbc:as400:<host>:naming=sql;libraries=*LIBL,...;transaction isolation=none
database.username=<user>
database.password=<password>
database.initialPoolSize=2
database.maxPoolSize=5
...
此 .properties 文件位于应用程序/Web 服务器的文件系统中。
我需要存储散列密码而不是直接存储密码,这样如果有人查看文件内容就无法知道真正的密码是什么。
像这样使用 SHA:
...
database.password=5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
...
必须有一种方法可以告诉 AS400 正在发送的密码是经过哈希处理的。
在我的研究中,我发现 AS400 使用 QSYS 库中的索引 QSYUPTBL 存储密码,该库能够使用 DES 或 SHA 哈希算法。因此它将加密接收到的密码,并将生成的哈希值与存储在索引中的哈希值进行比较。但是是否可以告诉数据库的身份验证过程期望密码被散列并直接比较它?
新发现:
IBM 的文档提到了一个关键字:RMTAUTMTH 用于设置远程身份验证方法,使用该参数中的 *ENCRYPTED 值将激活用户 ID 和密码中的加密:
...用户 ID 和相关的加密密码在 DDM 连接请求中发送。必须在两个系统上都提供加密支持才能使用此身份验证方法...摘自http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/cl/chgrdbdire.htm
所以貌似可以在AS400端配置,但是没有提到使用的加密算法以及jdbc驱动是否支持。