我现在有三个java应用程序,我想对DB密码进行加密。对于我的第一个应用程序,下面的jasypt语法可以工作。我有一个加密的密码,它可以登录到数据库没有任何问题。但是,我的另外两个应用程序由于一个无效的/用户名密码错误而失败。我的主要问题是:是否有一种方法来调试jasypt,这样我就可以看到它是否试图解密下面指定的密码?我猜解密失败了,它正在尝试使用加密的密码登录。如果我将persistence.xml更改为未加密的密码,它就能正常工作。谢谢大家的想法!
这是我的档案:
jasypt密码gen:
c:\jasypt-1.9.2\bin\encrypt input=mydbpassword password=password algorithm=PBEWithMD5AndTripleDES
----ENVIRONMENT----------------
Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 24.45-b08
-----ARGUMENTS-----------------
input: mydbpassword
password: password
algorithm: PBEWithMD5AndTripleDES
------OUTPUT-------------------
h+RqHWpovo5q390ID9+dTTs/9k0bmwlIpersistence.xml
<persistence-unit name="localDB" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="connection.provider_class" value="org.jasypt.hibernate.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider" />
<property name="connection.encryptor_registered_name" value="strongHibernateStringEncryptor" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" />
<!-- DEV -->
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=foo.com)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SID=db2)))" />
<property name="hibernate.connection.username" value="db2" />
<property name="hibernate.connection.password" value="ENC(h+RqHWpovo5q390ID9+dTTs/9k0bmwlI)" />春豆:
<bean id="hibernateStringEncryptor" class="org.jasypt.hibernate3.encryptor.HibernatePBEStringEncryptor">
<property name="registeredName">
<value>strongHibernateStringEncryptor</value>
</property>
<property name="algorithm">
<value>PBEWithMD5AndTripleDES</value>
</property>
<property name="password>
<value>password</value>
</property>
</bean>部署应用程序时收到的错误:
2016-05-09 16:37:29,149 INFO [STDOUT] INFO [DriverManagerConnectionProvider] using driver: oracle.jdbc.driver.OracleDriver at URL: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=foo.com)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SID=db2)))
2016-05-09 16:37:29,149 INFO [STDOUT] INFO [DriverManagerConnectionProvider] connection properties: {user=db2, password=****,autocommit=true,release_mode=auto}
2016-05-09 16:37:29,149 INFO [STDOUT] WARN [SettingsFactory] Could not obtain conection metadata java.sql.SQLException: ORA-01017: Invalid username/password; logon denied发布于 2016-10-23 03:53:14
我想你已经解决了。但你要求"...any的想法,任何人都可能有!“如果其他人也有同样的问题,以下是一些建议。
password2=ENC(h+RqHWpovo5q390ID9+dTTs/9k0bmwlI)注意,jasypt可以在解密后从内存中清除解密密码。
请参阅:org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer
...which从属性文件中读取加密的甲骨文password2,将其传递给使用env var ${password1}解码password2的jasypt解密器bean,将解密后的结果放入env ${password2},然后在persistence.xml中引用:
<property name="hibernate.connection.password" value="${password2}" />
因此,password2开始在属性文件中加密,最后在env ${password2}中解密。
您还需要org.jasypt.encryption.pbe.StandardPBEStringEncryptor和org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig,它们声明算法和包含解密密码("password1")的环境变量的名称。
详细描述了该方案:用Jasypt加密属性。
Jasypt文档
一旦您认为您已经完成了所有这些工作,您应该可以在日志中找到:EncryptablePropertyPlaceholderConfigurer -Loading properties file from class path resource [your.file.properties]
您可以通过在password1中添加一个字符来打破它来证明这个概念。重新启动应用程序,然后在日志中找到:
EncryptablePropertyPlaceholderConfigurer -Loading properties file from class path resource [your.file.properties]
然后是EncryptionOperationNotPossibleException。
将password1重置为应该是什么,并重新启动。解密应该又起作用了。
发布于 2021-08-18 09:10:35
我建议您执行以下操作来加密应用程序
注意:
- XYZ - Is your application password
- ABC - Is your jasypt encryptor password
存储输出,因为它将用于我们的application.properties文件.

spring.datasource.password=ENC(/pmc1gJQHo3zEM2faLtMsw==) jasypt.encryptor.password=ABC
https://stackoverflow.com/questions/37121873
复制相似问题