动态 bouncycastle 提供者注册失败

Posted

技术标签:

【中文标题】动态 bouncycastle 提供者注册失败【英文标题】:Dynamic bouncycastle provider registration failure 【发布时间】:2016-03-09 10:55:08 【问题描述】:

对于我的任务,我需要有一个非常小的测试项目,它只会做一些 ECC 操作。

为此,我决定使用 bouncycastle。由于有很多 java sn-ps 我很惊讶,添加的动态提供程序没有按预期工作。

Here 是完整的代码,这就是它在 IJ 中的样子:

所以,问题是:我如何解决所有需要的功能,尤其是addProvider

我在这个项目中使用 maven,这是我的pom.xml

更新:

Error:(11, 29) java: <identifier> expected
Error:(11, 30) java: illegal start of type
Error:(11, 33) java: ')' expected
Error:(11, 54) java: ';' expected
Error:(11, 55) java: illegal start of type
Error:(11, 56) java: <identifier> expected

【问题讨论】:

你遇到什么样的错误? 您现在需要将代码放在 main 方法中,不是吗?公共静态无效 main() @vagelis 谢谢,不错的收获。 【参考方案1】:

作为@Vagelis cmets,您缺少main 方法和一些导入。

java.security.Security.addProvider() 也位于 jdk 本身中,因此 pom.xml 中不需要额外的依赖项。

您更正的代码可能是:

import java.math.BigInteger;
import java.security.Security;
import java.security.spec.ECFieldFp;
import java.security.spec.ECParameterSpec;
import java.security.spec.ECPrivateKeySpec;
import java.security.spec.ECPublicKeySpec;
import java.security.spec.EllipticCurve;

import org.bouncycastle.jce.ECPointUtil;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;

public class Main 

        public static void main(String args[])

            Security.addProvider(new BouncyCastleProvider());
            EllipticCurve curve = new EllipticCurve(
            new ECFieldFp(new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839")), // q
            new BigInteger("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc", 16), // a
            new BigInteger("6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a", 16)); // b
            ECParameterSpec spec = new ECParameterSpec(
            curve,
            ECPointUtil.decodePoint(curve, Hex.decode("020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf")), // G
            new BigInteger("883423532389192164791648750360308884807550341691627752275345424702807307"), // n
            1); // h

            ECPrivateKeySpec priKey = new ECPrivateKeySpec(
            new BigInteger("876300101507107567501066130761671078357010671067781776716671676178726717"), // d
            spec);
            ECPublicKeySpec pubKey = new ECPublicKeySpec(
            ECPointUtil.decodePoint(curve, Hex.decode("025b6dc53bc61a2548ffb0f671472de6c9521a9d2d2534e65abfcbd5fe0c70")), // Q
            spec);
        

【讨论】:

以上是关于动态 bouncycastle 提供者注册失败的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider解决方法

在 fuse esb 中添加 bouncycastle 提供程序

Tomcat使用bouncycastle加密包进行SM2国密验签失败原因

Tomcat使用bouncycastle加密包进行SM2国密验签失败原因

Tomcat使用bouncycastle加密包进行SM2国密验签失败原因

使用 BouncyCastle 生成的证书作为服务器进行身份验证时出现“无法识别提供给包的凭据”错误