我使用的是Jasypt-1.9.0和Spring 3.1以及Hibernate 4.0.1。我在我的应用程序中有一个连接到数据库的要求,该数据库的密码(根)以加密的形式存储在应用程序中的属性文件中。
我在网上找了一下,找到了下面的链接:
- http://www.jasypt.org/spring31.html
- http://www.jasypt.org/hibernate.html
- http://www.jasypt.org/encrypting-configuration.html
我已经完成了以下步骤和配置我的要求:
- 在build路径中增加了jasypt-1.9.0和jasypt-hibernate 4-1.9.0。
- 在我的dispatcher-servlet文件中添加了以下内容:
< bean id="propertyConfigurer"
class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
< constructor-arg ref="configurationEncryptor" />
< property name="locations">
< list>
< value>classpath:database.properties< /value>
< /list>
< /property>
< /bean>
< bean id="configurationEncryptor"
class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
< property name="config" ref="environmentVariablesConfiguration" />
< /bean>
< bean id="environmentVariablesConfiguration"
class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
< property name="algorithm" value="PBEWithMD5AndDES" />
< property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
</bean>
- 使用Jasypt 1.9.0的**CLI工具,**我生成了下面的密码(附CLI快照)
x1c 0d1x-添加了一个新的环境变量APP_ENCRYPTION_PASSWORD,值为root
- 在database.properties文件中增加了加密密码
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/db1
db.username=root
db.password=ENC(bmfeQmgP/hJrh+mj6NANKA==)
现在,如果我运行我的应用程序,会出现以下异常:
org.jasypt.exceptions.EncryptionOperationNotPossibleException
at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.decrypt(StandardPBEByteEncryptor.java:981)
at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.decrypt(StandardPBEStringEncryptor.java:725)
at org.jasypt.properties.PropertyValueEncryptionUtils.decrypt(PropertyValueEncryptionUtils.java:72)
6条答案
按热度按时间siv3szwd1#
这个问题很可能已经过时了,但对于未来的探索者来说... EncryptionOperationNotPossibleException是jasypt抛出的一般异常,用于屏蔽其他可能的异常。在以下情况下可能发生此异常:
iyr7buue2#
如果您在加密过程中没有指定所有参数,Jasypt将使用默认值。请确保在解密期间使用这些精确的默认值。否则你可能会有麻烦...
这项工作对我来说:
roqulrg33#
我在加密属性文件值时也遇到了类似的问题。我在本地Windows机器上加密了值,并尝试在Linux机器上部署,但JRE版本不同,因此加密的值无法解密。但是我在Linux机器上加密了值,解密成功。
ej83mcc04#
我也遇到过类似的问题,但我意识到在使用CLI工具并尝试解密密码时,您不必包含算法属性,并且密码属性需要与CLI工具中使用的属性相匹配。
http://www.jasypt.org/encrypting-configuration.html
他们的例子看起来像这样,但这不起作用。
encryptor.setPassword("jasypt"); // could be got from web, env variable... encryptor.setAlgorithm("PBEWithHMACSHA512AndAES_256"); encryptor.setIvGenerator(new RandomIvGenerator());
解决方案:
encryptor.setPassword("MYPAS_WORD"); // Like in the CLI Tool encryptor.setAlgorithm("PBEWithHMACSHA512AndAES_256"); //Remove this encryptor.setIvGenerator(new RandomIvGenerator()); //Remove this as well
会很好的。
在您的情况下,您可以删除算法属性,并且passwordEvnName需要与CLI工具中使用的属性相匹配。
amrnrhlw5#
1.删除所有上述XML配置,并将以下bean添加到配置类:
1.添加属性值,如
并将这些值传递到数据源上方。
1.在属性文件中配置加密密钥,如#
1.不要使用cmd和jaspyt jar创建加密密钥我将与您的密钥共享创建加密密钥的链接:
Jasypt Online Encryption and Decryption
1.根据您的版本添加jaspyat依赖项。
如果你必须在服务器上运行,如果你面临密码加密不匹配或不可能的问题,那么再添加一个jdbc模板bean:
它工作正常,没有发现任何问题。
使用该工具创建密钥。因为我已经尝试过很多次使用jaspyt命令行,但是加密是错误的,不支持它。您可以交叉检查使用上述工具生成的密钥与密钥。
vc6uscn96#
感谢Fado指出了加密工作需要设置的参数。下面的代码现在对我来说是有效的: