Java 使用huttol包做 SM2签名验签
Java 中可以使用 Bouncy Castle 提供的 SM2 加密算法实现签名和验签操作,具体步骤如下:
- 引入 Bouncy Castle 库
下载 Bouncy Castle 的 jar 包,将其添加到项目中,并通过 Security.addProvider(new BouncyCastleProvider()); 方法将其添加到 Java 安全算法提供者列表中。
- 生成 SM2 密钥对
使用 KeyPairGenerator.getInstance("EC", "BC") 方法生成 SM2 密钥对,其中 EC 表示椭圆曲线算法,BC 表示使用 Bouncy Castle 提供的算法。
KeyPairGenerator generator = KeyPairGenerator.getInstance("EC", "BC");
generator.initialize(new SM2ParameterSpec(
new ASN1ObjectIdentifier("1.2.156.10197.1.301"), SM2NamedCurves.getByName("sm2p256v1")),
new SecureRandom());
KeyPair keyPair = generator.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
- 签名数据
使用 SM2Signer 类对数据进行签名,其中需要提供私钥和待签名的数据。
SM2Signer signer = new SM2Signer();
signer.init(true, new ECPrivateKeyParameters(
((BCECPrivateKey) privateKey).getD(), SM2NamedCurves.getByName("sm2p256v1")));
byte[] data = "Hello, world!".getBytes();
signer.update(data, 0, data.length);
byte[] signature = signer.generateSignature();
- 验证签名
使用 SM2Signer 类对签名进行验证,其中需要提供公钥和待验证的数据。
SM2Signer signer = new SM2Signer();
signer.init(false, new ECPublicKeyParameters(
((BCECPublicKey) publicKey).getQ(), SM2NamedCurves.getByName("sm2p256v1")));
byte[] data = "Hello, world!".getBytes();
signer.update(data, 0, data.length);
boolean verified = signer.verifySignature(signature);
原文地址: https://www.cveoy.top/t/topic/bsIA 著作权归作者所有。请勿转载和采集!