gpt4 book ai didi

passwords - 为什么 PBE 使用不同的盐和迭代次数生成相同的 key ?

转载 作者:行者123 更新时间:2023-12-04 11:41:29 27 4
gpt4 key购买 nike

我正在尝试测试 PBE 加密/解密。我发现 PBE 使用不同的盐和迭代次数生成相同的 key 。当然,使用的密码是一样的。
据我了解,相同的密码和不同的盐/迭代应该得到不同的 key 。
下面是我的测试代码:

import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;

public class PBETest
{
public static void main(String[] args)
throws Exception
{
String algo = "PBEWithSHA1andDESede";
System.out.println("====== " + algo + " ======");

char[] password = "password".toCharArray();
SecureRandom rand = new SecureRandom();
byte[] salt = new byte[32];
rand.nextBytes(salt);
int iterationCount = rand.nextInt(2048);

//encryption key
PBEKeySpec encPBESpec = new PBEKeySpec(password, salt, iterationCount);
SecretKeyFactory encKeyFact = SecretKeyFactory.getInstance(algo);
Key encKey = encKeyFact.generateSecret(encPBESpec);
System.out.println("encryptioin iteration: " + iterationCount);

//decryption key
rand.nextBytes(salt);
iterationCount = rand.nextInt(2048);
PBEKeySpec decPBESpec = new PBEKeySpec(password, salt, iterationCount);
SecretKeyFactory decKeyFact = SecretKeyFactory.getInstance(algo);
Key decKey = decKeyFact.generateSecret(decPBESpec);
System.out.println("decryptioin iteration: " + iterationCount);

System.out.println("encryption key is same as decryption key? " + encKey.equals(decKey));

}

}

我期待最终输出是 false .
我做错了什么吗?

最佳答案

您非常幸运,您的随机盐和迭代计数恰好匹配。直接去拉斯维加斯。现在。 ;)

我在谷歌上搜索了 PBEWithSHA1andDESede 并找到了这个例子:http://cryptofreek.org/2010/06/04/encrypting-and-decrypting-files-with-java其中他单独指定 key new PBEKeySpec(password)并创建一个单独的 PBEParameterSpec使用盐和迭代计数,然后将其传递给 Cipher.init()。

所以,不,你没有做错任何事,你只是在盐和计数被塞进密码之前停下来。

关于passwords - 为什么 PBE 使用不同的盐和迭代次数生成相同的 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11667480/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com