动态 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国密验签失败原因