java - 密码加密方法对于相同的参数永远不会返回相同的结果

标签 java security encryption passwords

我有found代码利用java.security.*来加密密码。但当我使用它时,它不起作用。每次我使用相同的参数调用加密方法(这些参数显示在 encrypt() 方法中,并且每次都是相同的),我会得到不同的结果,这当然会使代码无用。这是我的代码:

public byte[] encrypt(String clearPassword, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {
    System.out.println(clearPassword+"     **********     "+salt);
    String algorithm = "PBKDF2WithHmacSHA1";
    int derivedKeyLength = 1600;
    int iterations = 20000;

    KeySpec spec = new PBEKeySpec(clearPassword.toCharArray(), salt, iterations, derivedKeyLength);
    SecretKeyFactory f = SecretKeyFactory.getInstance(algorithm);
    byte [] truc = f.generateSecret(spec).getEncoded();
    System.out.println(truc);
    return truc;
}

public byte[] generateSalt() throws NoSuchAlgorithmException {
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
    byte[] salt = new byte[8];
    random.nextBytes(salt);

    return salt;
}

我认为我在原始代码中的某个时刻引入了错误,但我看不出错误在哪里。有什么想法吗?

最佳答案

这是因为 System.out.println(truc); 没有按照您的想法进行操作。如果您尝试过:

System.out.println(Arrays.toString(truc));

您将打印数组的实际内容,每次使用相同的参数调用该方法时,该内容应该是相同的。

例如:printing arrays

关于java - 密码加密方法对于相同的参数永远不会返回相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18470405/

相关文章:

php - 授予用户对特定 mySQL 表的权限是一种良好的安全做法吗?

linux - 加密 FTP 目录以确保文档安全

Java:如果我使用封装在类中的原始数据类型,它会慢多少?

java - JSON 文件太短,无法创建 JsonReader

.net - 如何检查 NTAccount 对象是代表组还是用户?

linux - 如何在Chrome OS(Linux)上解密只读的加密Chromebook WiFi密码

c++ - 施奈尔河豚

java - 检查新版本(更新检查)

java - 使用 Java 转换 18 位十进制 Julian 时间戳

javascript - 使用 firebase 进行 javascript 注入(inject)攻击的风险