java加签验签demo

本文介绍了使用Java进行加签和验签的实战步骤,包括SignUtils工具类的详细说明,以及如何在main方法中应用这些工具进行签名和验证操作。文章最后进行了简单总结,概括了关键知识点。
摘要由CSDN通过智能技术生成

java加签验签demo


SignUtils工具类


import com.alipay.api.internal.util.StreamUtil;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;

import java.io.ByteArrayInputStream;
import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

public class SignUtils {
   
    /**
     * sha256WithRsa 加 签
     *
     * @param content
     * @param privateKey
     * @param charset
     * @return
     * @throws RuntimeException
     */
    public static String rsa256Sign(String content, String privateKey,
                                    String charset) throws RuntimeException {
   

        try {
   
            PrivateKey priKey = getPrivateKeyFromPKCS8("RSA",
                    new ByteArrayInputStream(privateKey.getBytes()));

            java.security.
以下是 sm2 签验的示例代码,使用了 Bouncy Castle 库: ```java import org.bouncycastle.crypto.CryptoException; import org.bouncycastle.crypto.params.ECPublicKeyParameters; import org.bouncycastle.crypto.signers.SM2Signer; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.util.encoders.Hex; import java.security.*; import java.security.spec.ECParameterSpec; import java.security.spec.ECPoint; import java.security.spec.ECPublicKeySpec; import java.security.spec.InvalidKeySpecException; public class SM2Demo { public static void main(String[] args) throws NoSuchProviderException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeySpecException, InvalidKeyException, SignatureException, CryptoException { Security.addProvider(new BouncyCastleProvider()); // 生成密钥对 KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("sm2p256v1"); kpg.initialize(ecSpec, new SecureRandom()); KeyPair keyPair = kpg.generateKeyPair(); // 待签名数据 String data = "Hello, world!"; byte[] dataBytes = data.getBytes(); // 生成签名 SM2Signer signer = new SM2Signer(); signer.init(true, keyPair.getPrivate()); signer.update(dataBytes, 0, dataBytes.length); byte[] signature = signer.generateSignature(); // 验证签名 signer.init(false, keyPair.getPublic()); signer.update(dataBytes, 0, dataBytes.length); boolean verified = signer.verifySignature(signature); System.out.println("Signature: " + Hex.toHexString(signature)); System.out.println("Verified: " + verified); } } ``` 注意:需要先添 Bouncy Castle 作为安全提供者。在示例代码中,我们使用了 SM2Signer 类来进行和验操作,使用了 ECNamedCurveTable 类来获取 SM2 的椭圆曲线参数。在实际应用中,密钥对的生成应该是在安全的环境下进行,而不是在代码中直接生成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值