11

我正在使用 Jasypt 将我们的数据库密码以非明文格式存储在我们的休眠配置文件中。

例如,而不是

    <property name="hibernate.connection.username">user1</property>
    <property name="hibernate.connection.password">password1</property>

我想要类似的东西

    <property name="hibernate.connection.username">user1</property>
    <property name="hibernate.connection.password">ENC(0HY4F73HFPQ85CN)</property>

我正在使用 PBEWITHMD5ANDTRIPLEDES 算法。我正在阅读它,似乎这可能需要安装 JCE 或“管辖权政策”扩展。我的问题是,如果我在 PBE 算法列表中看到这些东西是否已经安装?

我运行了 listAlgorithms.bat 脚本:

C:\dev\jasypt-1.9.1\bin>listAlgorithms.bat

DIGEST ALGORITHMS:   [MD2, MD5, SHA, SHA-256, SHA-384, SHA-512]

PBE ALGORITHMS:      [PBEWITHMD5ANDDES, PBEWITHMD5ANDTRIPLEDES, PBEWITHSHA1ANDDESEDE, PBEWITHSHA1ANDRC2_40]

但是当我尝试加密我的密码时,我收到一条非常无用的错误消息:

C:\dev\jasypt-1.9.1\bin>encrypt.bat input=etrading_rw_123 password=encryptionkey algorithm=PBEWITHMD5ANDTRIPLEDES

----ENVIRONMENT-----------------

Runtime: Sun Microsystems Inc. Java HotSpot(TM) Client VM 20.14-b01



----ARGUMENTS-------------------

algorithm: PBEWITHMD5ANDTRIPLEDES
input: etrading_rw_123
password: encryptionkey



----ERROR-----------------------

Operation not possible (Bad input or parameters)

如果我使用 algorithm=PBEWITHMD5ANDDES 运行相同的脚本,它工作正常。“支持的算法”列表实际上是否意味着“如果启用它们将支持的算法”而不是“可以使用的算法”?

我正在使用 Java 版本:

java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)
4

3 回答 3

14

由于 Jasypt CLI 使用说明中缺少一些信息,我遇到了这个问题。

生成初始值的默认生成器是NoIvGenerator. 对于某些/大多数算法,以这种方式生成的 IV 无效,因此会显示上面的错误消息。您必须添加附加参数ivGeneratorClassName=org.jasypt.iv.RandomIvGenerator才能使其工作。

见:https ://github.com/jasypt/jasypt/issues/8

于 2020-04-15T12:39:28.173 回答
1
  1. Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy(小下载)可以启用更高强度的算法。

https://www.oracle.com/technetwork/java/javase/downloads/jce-all-download-5170447.html

仅供参考:JDK 9 及更高版本附带并默认使用无限策略文件。

只有早于 8u161、7u171 和 6u181 的 JDK 8、7 和 6 更新才需要上述早期版本的无限策略文件。在这些版本及更高版本中,策略文件已包含在内,但默认情况下未启用。

有关详细信息,请参阅 JDK-8170157。 https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8170157

  1. 另一个问题可能是您的JAVA_HOME环境变量指向较旧的Java 版本。Jasypt 的 bin/*.sh 和 *.cmd 脚本使用$JAVA_HOME/bin/java或者%JAVA_HOME%\bin\java该环境变量是否存在。
于 2019-02-27T21:39:56.247 回答
0

我无法使用 PBEWITHHMACSHA512ANDAES_256 算法从命令提示符生成加密密码。我在命令中添加了额外的参数并且它起作用了。

java -cp C:/Users/.m2/repository/org/jasypt/jasypt/1.9.3/jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI ivGeneratorClassName=org.jasypt.iv.RandomIvGenerator 输入= "originalpassword*" 密码=加密密码算法=PBEWITHHMACSHA512ANDAES_256

通过使用上述命令,我能够生成加密密码并在 application.properties 文件中使用它。我已经为 Jasypt 使用了 3.0.0 spring 依赖项。

于 2021-07-20T09:55:19.653 回答