gpt4 book ai didi

java - 没有 AlgorithmParameterSpec 可以使用 KeyAgreement 吗?

转载 作者:行者123 更新时间:2023-11-30 01:45:02 25 4
gpt4 key购买 nike

在我使用 SpongyCaSTLe 的 Android 应用程序中,我想使用特定椭圆曲线(prime192v1) 并且我正在使用此代码生成私有(private)和公共(public)参数的 byte[] 表示:

        try{
KeyPairGenerator g = KeyPairGenerator.getInstance("ECDH", "SC");

org.spongycastle.jce.spec.ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime192v1");
g.initialize(ecSpec, new SecureRandom());

KeyPair kp1 = g.generateKeyPair();
KeyPair kp2 = g.generateKeyPair();

// Alice generated this
byte[] privK1 = kp1.getPrivate().getEncoded();
byte[] pubK1= kp1.getPrivate().getEncoded();

// Bob generated this
byte[] privK2 = kp2.getPrivate().getEncoded();
byte[] pubK2= kp2.getPrivate().getEncoded();

}catch(Exception e)
{
Log.e(LOGTAG, "Exception caught in ECDHInit function");
}

现在让我们假设 Alice 和 Bob 将他们的私钥保存在本地,交换 pubK1pubK2 并希望继续设置共享 secret (他们现在在 byte[] 格式)。我将只描述爱丽丝的情况,至于鲍勃,这是相同的:

KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH", "SC");

PrivateKey privateKey = KeyFactory.getInstance("ECDH", "SC").generatePrivate(new PKCS8EncodedKeySpec(privK1));
PublicKey publicKey = KeyFactory.getInstance("ECDH", "SC").generatePublic(new X509EncodedKeySpec(pubK2));

我的问题来了 -使用以下代码,我设法为爱丽丝和鲍勃获得相同的共享 secret

keyAgreement.init(privateKey);
keyAgreement.doPhase(publicKey, true);

byte[] sharedSecret = SHA256(keyAgreement.generateSecret());

但我没有指定我的特殊曲线 prime192v1

如果我尝试以这种方式提供:

org.spongycastle.jce.spec.ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime192v1");

keyAgreement.init(privateKey, ecSpec);
keyAgreement.doPhase(publicKey, true);

byte[] sharedSecret = SHA256(keyAgreement.generateSecret());

抛出一个异常说

java.security.InvalidAlgorithmParameterException: No algorithm parameters supported

为什么我不能提供我想要的参数? KeyAgreement 是否以某种方式从私钥中推断出这一点?

谢谢!

最佳答案

事实证明,我在 Android Studio 调试器中得到了答案。在检查 PrivateKey 对象后,我发现内部成员 privateKey.ecSpec 包含所选曲线的所有详细信息。因此传递参数是不必要的并且会引发错误,使用代码而不提供额外的 ecSpec

关于java - 没有 AlgorithmParameterSpec 可以使用 KeyAgreement 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33851539/

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