Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jasypt | StrongPasswordEncryptor |密码不匹配_Java_Jasypt - Fatal编程技术网

Java Jasypt | StrongPasswordEncryptor |密码不匹配

Java Jasypt | StrongPasswordEncryptor |密码不匹配,java,jasypt,Java,Jasypt,我正在使用Jasypt对用户密码进行编码并进行匹配 我创建了一个util类来调用其API:- public class EncryptionUtil { private static final StrongPasswordEncryptor passwordEncryptor = new StrongPasswordEncryptor(); /** * Default private constructor. */ private EncryptionUtil() { } /**

我正在使用Jasypt对用户密码进行编码并进行匹配

我创建了一个util类来调用其API:-

public class EncryptionUtil {

private static final StrongPasswordEncryptor passwordEncryptor = new StrongPasswordEncryptor();

/**
 * Default private constructor.
 */
private EncryptionUtil() {
}

/**
 * Encrypts a string using {@link StrongPasswordEncryptor}
 * 
 * @param input
 *            Plain string
 * @return encrypted string.
 */
public static final String encyptString(final String input) {
    return passwordEncryptor.encryptPassword(input);
}

/**
 * @see StrongPasswordEncryptor#checkPassword(String, String)
 * @param plainPassword
 * @param encryptedPassword
 * @return boolean
 */
public static boolean checkPassword(String plainPassword, String encryptedPassword) {
    return passwordEncryptor
            .checkPassword(plainPassword, encryptedPassword);
}

}
尝试使用Junit测试它运行得非常好:-

@Test
public void test() {
    String encryptedPassword = EncryptionUtil.encyptString("password");
    Assert.assertNotNull(encryptedPassword);
    Assert.assertTrue(EncryptionUtil.checkPassword("password",
            encryptedPassword));
}
我正在SQL表中存储用户凭据。对于测试/开发环境,我在使用EncryptionUtil类加密密码后执行了SQL插入

问题:-

当从数据库获取凭据进行匹配时,一旦将其部署/运行到其他计算机,凭据匹配就会失败

在使用StrongPasswordEncryptor#encyptString进行了一些研究之后,我发现对于相同的普通密码(比如“password”),在多次运行时,生成的加密密码是不同的

i、 e:-

@Test
public void test() {
    String encryptedPassword = EncryptionUtil.encyptString("password");
    System.out.println(encryptedPassword);
}
这将在每次运行时打印不同的加密字符串。 我不是加密专家,但我相信StrongPasswordEncryptor在每次运行中使用的salt是不同的

我该如何解决这个问题


我应该能够在通过凭据匹配流的SQL表中插入加密的用户密码。

每次运行测试程序都会有所不同,因为,
StrongPasswordEncryptor
将在每次启动时创建,并附加到类
EncryptionUtil
,因为它标记为
静态
最终
。这意味着提供的SALT对于
StrongPasswordEncryptor

您需要直接从文档中阅读此内容

在web应用程序中,Jasypt允许开发人员避免将PBE加密机的加密密码存储在webapp内的文件中,而是在每次部署应用程序时通过web界面向应用程序指定这些密码

  • 特殊*Config类:
    org.jasypt.encryption.pbe.WebPBEConfig
    org.jasypt.encryption.pbe.WebStringPBEConfig
    ,当分配给 加密机,“标记”此加密机有资格接收其 通过网络输入密码

  • 上下文侦听器,
    org.jasypt.web.pbeconfig.WebPBEInitializationContextListener
    将让我们创建加密机,将其设置为WebPBEConfig 配置并在应用程序中的某个位置注册它们。这一背景 如果我们使用的是Spring框架,那么监听器就没有必要了

  • 一个过滤器,
    org.jasypt.web.pbeconfig.WebPBEConfigFilter
    ,它将 在加密之前,避免任何用户访问web应用程序 密码已由管理员设置

  • 一个servlet,
    org.jasypt.web.pbeconfig.WebPBEConfigServlet
    ,它将 向授权用户显示一张表格,他/她可以使用该表格设置 使用WebPBEConfig的所有加密机的加密密码


请从我看来不错的地方完整地读一遍。您是否在没有多次重新启动/部署应用程序的情况下验证了测试用例?我认为,salt是在输出前加上的。因此,您的代码应该可以正常工作。也许是你的数据库存储/检索造成的?@Octopus不,我没有。为什么每次运行的加密数据都不同?查看StrongPasswordEncryptor的源代码,其默认构造函数(每次应用程序启动/重新启动时都会调用)的最后一个语句为“this.digester.initialize();”。我无法理解它的用途。是的,它需要在每次应用程序重新启动时进行初始化。如果没有初始化,您怎么能期望它工作?是的,它会有所不同。这同样适用于我的应用程序(web应用程序)重新启动/重新部署。加密字符串不应该每次都相同吗?是的,您可以这样做。
JAsypt
提供了几种方法。请阅读我的最新答案。