1

我正在使用 Jasypt 1.9.0、Spring 3.1.1.RELEASE 和 Maven 3.0.3。使用 Jasypt 命令行工具,我生成了类似这样的密码……</p>

./digest.sh input=admin providerClassName=org.bouncycastle.jce.provider.BouncyCastleProvider algorithm=SHA-256  saltGeneratorClassName=org.jasypt.salt.ZeroSaltGenerator

但是,当我配置 Spring 安全性以尝试匹配某人在登录屏幕上输入的密码时……</p>

<beans:bean id="bcProvider" class="org.bouncycastle.jce.provider.BouncyCastleProvider" />

<beans:bean id="jasyptStringDigester" class="org.jasypt.digest.StandardStringDigester">
    <beans:property name="algorithm">
        <beans:value>SHA-256</beans:value>
    </beans:property>
    <beans:property name="provider">
        <beans:ref bean="bcProvider" />
    </beans:property>
    <beans:property name="saltGenerator">
        <beans:bean id="saltGenerator" class="org.jasypt.salt.ZeroSaltGenerator"/>
    </beans:property>
</beans:bean>

<!-- This Spring Security-friendly PasswordEncoder implementation will -->
<!-- wrap the StringDigester instance so that it can be used from -->
<!-- the security framework. -->
<beans:bean id="passwordEncoder" class="org.jasypt.spring.security3.PasswordEncoder">
    <property name="stringDigester">
        <ref bean="jasyptStringDigester" />
    </property>
</beans:bean>

<authentication-manager alias="authenticationManager" id="authenticationManager">
    <authentication-provider user-service-ref="sbdUserDetailsService">
        <password-encoder ref="passwordEncoder" />
    </authentication-provider>
</authentication-manager>

Spring 生成的密码与存储的密码不同,因此我无法验证我的用户。我缺少一些配置吗?为什么在身份验证期间,SPring 会生成与 Jasypt 不同的东西?

4

1 回答 1

0

如果您digest.sh多次运行,您将获得相同输入值的不同哈希值。我假设 Jasypt 使用时间戳或随机字符串作为

为了能够生成相同的哈希,您必须知道使用的盐或控制它的生成方式。有一个 cli 参数称为saltGeneratorClassName. 通过提供一个实现SaltGenerator接口的类,您可以控制盐的生成。

更新:

忘记我所说的盐的位置。你只需要改变jasyptStringDigester一点:

<beans:bean id="jasyptStringDigester" class="org.jasypt.digest.StandardStringDigester">
    <beans:property name="algorithm">
        <beans:value>SHA-256</beans:value>
    </beans:property>
    <beans:property name="provider">
        <beans:ref bean="bcProvider" />
    </beans:property>
    <beans:property name="saltGenerator">
        <beans:ref bean="saltGenerator" />
    </beans:property>
</beans:bean>

<beans:bean class="impl.of.your.SaltGenerator" id="saltGenerator" />

然后您需要提供impl.of.your.SaltGeneratordigest.sh

./digest.sh input=admin \
    providerClassName=org.bouncycastle.jce.provider.BouncyCastleProvider \
    algorithm=SHA-256 \
    saltGeneratorClassName=impl.of.your.SaltGenerator
于 2012-12-12T07:43:25.920 回答