首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调试jasypt

如何调试jasypt
EN

Stack Overflow用户
提问于 2016-05-09 17:26:49
回答 2查看 1.8K关注 0票数 1

我现在有三个java应用程序,我想对DB密码进行加密。对于我的第一个应用程序,下面的jasypt语法可以工作。我有一个加密的密码,它可以登录到数据库没有任何问题。但是,我的另外两个应用程序由于一个无效的/用户名密码错误而失败。我的主要问题是:是否有一种方法来调试jasypt,这样我就可以看到它是否试图解密下面指定的密码?我猜解密失败了,它正在尝试使用加密的密码登录。如果我将persistence.xml更改为未加密的密码,它就能正常工作。谢谢大家的想法!

这是我的档案:

jasypt密码gen:

代码语言:javascript
复制
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/9k0bmwlI

persistence.xml

代码语言:javascript
复制
<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)" />

春豆:

代码语言:javascript
复制
<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>

部署应用程序时收到的错误:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2016-10-23 03:53:14

我想你已经解决了。但你要求"...any的想法,任何人都可能有!“如果其他人也有同样的问题,以下是一些建议。

  • 附加jasypt源代码,并在引发与失败身份验证相关的异常时跟踪它。查找密码被解码的部分。 如果缓冲区为空,您将知道它找不到密码。
  • 您可以在persistence.xml中将加密的Oracle密码以明文形式显示出来,您可以将解密密码("password1")注入运行时环境,jasypt将使用该环境解密存储在类路径上安装的属性文件中的加密Oracle密码("password2"): 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.StandardPBEStringEncryptororg.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重置为应该是什么,并重新启动。解密应该又起作用了。

票数 1
EN

Stack Overflow用户

发布于 2021-08-18 09:10:35

我建议您执行以下操作来加密应用程序

  1. 下载jasypt-1.9.3.jar您可以使用Maven Jar收集
  2. 从maven .m文件夹访问jasypt-1.9.3.jar,并将其放在可以运行以下命令的位置。 org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI -cp jasypt-1.9.3.jar input="XYZ“password=ABC algorithm=PBEWithMD5AndDES

注意:

代码语言:javascript
复制
- XYZ - Is your application password
- ABC - Is your jasypt encryptor password
  1. 下面是上述命令的结果

存储输出,因为它将用于我们的application.properties文件.

  1. pom.xml文件中添加以下依赖项 com.github.ulisesbocchiojasypt-spring-boot2.0.0
  1. @EnableEncryptableProperties注释添加到SpringBoot启动类文件中,如下所示。 @SpringBootApplication @EnableEncryptableProperties 公共类应用程序{公共静态空主( SpringApplication.run(IBpsAppApplication.class,String[]);} }
  2. 最后,在application.properties中添加以下属性。

spring.datasource.password=ENC(/pmc1gJQHo3zEM2faLtMsw==) jasypt.encryptor.password=ABC

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37121873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档