命令行Jasypt客户端加密“操作不可能”

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

例如,而不是

    <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)

你需要查看这个之前的问题,以获取权限策略文件。 - nachokk
谢谢。所以,即使它在我的“可用算法”列表中列出,如果没有策略文件,它也无法工作? - Matt
我肯定毫无头绪。 - nachokk
3个回答

14

我遇到这个问题是因为Jasypt CLI使用说明中缺少一些信息。

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

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


1
  1. Java密码扩展(JCE)无限制强度管辖策略(小型下载)可启用更高强度算法。

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

FYI: JDK 9及更高版本默认使用无限制策略文件,并随同发布。 早期版本的无限制策略文件仅适用于JDK 8、7和6更新版本早于8u161、7u171和6u181。在这些版本及以后的版本中,策略文件已包含但默认未启用。 有关详细信息,请参见JDK-8170157。 https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8170157 另一个问题可能是您的JAVA_HOME环境变量指向较旧的Java版本。 Jasypt的bin / * .sh和* .cmd脚本将使用$ JAVA_HOME / bin / java或%JAVA_HOME%\bin\java,如果存在该环境变量。

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 input="originalpassword*" password=encryptionpassword algorithm=PBEWITHHMACSHA512ANDAES_256

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接