gpt4 book ai didi

Java 8 使用带有 SealedObject 的 ECIES 密码失败,并显示 'NullPointerException' - 字符串不能为空

转载 作者:行者123 更新时间:2023-12-01 19:12:35 25 4
gpt4 key购买 nike

我尝试使用 ECIES 密码来实例化 SealedObject,但失败并出现 NullPointerException。我正在使用 Java JDK1.8.0_72 和在 Windows 10 上运行的 Bouncy CaSTLe bcprov-jdk15on v1.53。代码如下所示:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("ECIES");
kpg.initialize(new ECGenParameterSpec("secp256r1"));
KeyPair keyPair = kpg.generateKeyPair();

Cipher cipher = Cipher.getInstance("ECIES");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());

String toEncrypt = "Hello";

// Check that cipher works ok
cipher.doFinal(toEncrypt.getBytes());

// Using a SealedObject to encrypt the same string fails with a NullPointerException
SealedObject sealedObject = new SealedObject(toEncrypt, cipher);

代码成功调用“cipher.doFinal()”,但在实例化 SealedObject 时失败。堆栈跟踪是:

java.lang.NullPointerException: string cannot be null
at org.bouncycastle.asn1.ASN1OctetString.<init>(Unknown Source)
at org.bouncycastle.asn1.DEROctetString.<init>(Unknown Source)
at org.bouncycastle.jcajce.provider.asymmetric.ies.AlgorithmParametersSpi.engineGetEncoded(Unknown Source)
at java.security.AlgorithmParameters.getEncoded(AlgorithmParameters.java:362)
at javax.crypto.SealedObject.<init>(SealedObject.java:179)

我试图避免指定特定的提供程序(即 Bouncy CaSTLe)并避免任何特定于提供程序的类,例如 IESParameterSpec,因为该组件使用外部配置来指定要使用的算法。该组件旨在用作流动节点集群中消息传递库的一部分,其中每个节点可能使用不同的加密算法,因此 SealedObject 似乎是一个合理的选择,因为它可用于传递所使用的算法(任何使用加密的消息使用接收者的公钥,因此接收者必须拥有相应的私钥才能解密消息)。

欢迎任何想法或建议。

最佳答案

Bouncy CaSTLe 的 David Hook 查看并在 org.bouncycastle.jcajce.provider.asymmetric.ies.AlgorithmParametersSpi.engineGetEncoded 中发现了一个问题并在1.55b04中提供了修复。我对此进行了测试,它已经解决了这个问题。

再次感谢您的帮助 Maarten。

关于Java 8 使用带有 SealedObject 的 ECIES 密码失败,并显示 'NullPointerException' - 字符串不能为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35339382/

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