获取错误org.jasypt.exceptions.EncryptionInitializationException:未为基于密码的加密器设置密码

时间:2012-05-15 12:05:44

标签: java jasypt

我正在使用jasypt-1.9.0进行加密。

Jdbc.properties

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:ORCL
jdbc.username=testuser
jdbc.password=ENC(lKmVnTVL3zSJXrZpwFmhd6crSHLzYihH)
hibernate.dialect=org.hibernate.dialect.OracleDialect
jpa.databasePlatform=toplink.hibernate.EssentialsHSQLPlatformWithNative
jpa.database=ORCL
C:\jasypt-1.9.0\bin>encrypt input=testuser password=testuser

----ENVIRONMENT-----------------
Runtime: Sun Microsystems Inc. Java HotSpot(TM) Client VM 1.5.0_17-b04
----ARGUMENTS-------------------
input: testuser
password: testuser
----OUTPUT----------------------

lKmVnTVL3zSJXrZpwFmhd6crSHLzYihH

我从您的某个网站获得了参考资料。我正在使用多个上下文文件。我有 构造

<bean
class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfi
gurer">
<constructor-arg>
<bean class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<property name="config">
<bean
class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="algorithm" value="PBEWithMD5AndDES" />
<property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
</bean>
</property>
</bean>
</constructor-arg>
<property name="locations">
<list>
<value>classpath:/META-INF/props/db/jdbc.properties</
value>
</list>
</property>
</bean>

<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"
value="${jdbc.driverClassName}" ></property>

<property name="url"
value="${jdbc.url}" ></property>
<property name="username"
value="${jdbc.username}" ></property>
<property name="password"
value="${jdbc.password}"></property>
<property name="initialSize" value="10"> </property>
<property name="maxActive"
value="30"> </property>
<property name="maxIdle"
value="10"> </property>
<property name="maxWait"
value="5000"> </
property>
<property name="removeAbandoned"
value="true"> </
property>
<property name="logAbandoned"
value="true"> </
property>

</bean>

当我登录我的应用程序时,我收到错误::

  

org.jasypt.exceptions.EncryptionInitializationException:密码没有   设置为基于密码的加密器

2 个答案:

答案 0 :(得分:5)

您的“APP_ENCRYPTION_PASSWORD”属性似乎未正确设置为环境变量。请参阅this链接以检查它是否已正确设置为环境变量。要检查配置的其余部分是否存在问题,请将<property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />更改为<property name="password" value="YOUR_PLAIN_TEXT_PASSWORD_HERE" />,并将YOUR_PLAIN_TEXT_PASSWORD_HERE替换为纯文本密码,以测试其余配置是否正常工作。

要在Windows XP中将APP_ENCRYPTION_PASSWORD设置为环境变量,请参阅此link

或者,您可以在运行程序时将密码作为vm参数传递。如果它是独立程序,您将像java ClassWithMain -DAPP_ENCRYPTION_PASSWORD=your_password一样传递它。如果它是Web应用程序,则在启动服务器时必须传递相同的参数。有关如何为tomcat执行此操作,请参阅this问题。然后在弹簧配置中,将<property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />替换为<property name="passwordSysPropertyName" value="APP_ENCRYPTION_PASSWORD" />

答案 1 :(得分:-1)

设置环境变量后。请重启你的日食。     你可能不会面对这个问题。如果问题仍然存在,请尝试通过以下代码查找您的环境变量。

Map<String, String> env = System.getenv();
            for (String envName : env.keySet()) {
                System.out.format("%s=%s%n", envName,
                                  en`enter code here`v.get(envName));
            }