使用SM2算法对该字符串进行签名时,需要先将字符串进行编码并进行摘要计算,然后再进行签名。下面是Java和PHP版本的示例代码:

Java版本:

import org.bouncycastle.crypto.digests.SM3Digest;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.signers.SM2Signer;
import org.bouncycastle.util.encoders.Hex;
import java.math.BigInteger;
import java.security.SecureRandom;

public class SM2Demo {
    public static void main(String[] args) {
        // 待签名的字符串
        String data = "partnerOrgId=PA63071119&project=YINKAKEJI182&fileType=1&urlType=1&uuid=b83e97e09fe903adfcb48f88edcd911b";
        // 私钥
        String privateKeyStr = "ybEm/SzNv0wKtVlLFRUknDYm3uuJueRfwFyEb8YU2ZM=";
        byte[] privateKeyBytes = Base64.getDecoder().decode(privateKeyStr);
        BigInteger privateKey = new BigInteger(1, privateKeyBytes);
        // 生成公钥
        ECPublicKeyParameters publicKey = SM2Utils.generatePublicKey(privateKey);
        // 计算摘要值
        byte[] hash = SM2Utils.hash(data.getBytes());
        // 生成签名
        SM2Signer signer = new SM2Signer();
        signer.init(true, new ECPrivateKeyParameters(privateKey, SM2Utils.DOMAIN_PARAMS));
        signer.update(hash, 0, hash.length);
        byte[] signature = signer.generateSignature();
        // 输出签名结果
        String signHex = Hex.toHexString(signature);
        System.out.println(signHex);
    }
}

class SM2Utils {
    static final ECDomainParameters DOMAIN_PARAMS;
    static final SecureRandom RANDOM;

    static {
        // 初始化SM2算法参数
        X9ECParameters ecParams = GMNamedCurves.getByName("sm2p256v1");
        DOMAIN_PARAMS = new ECDomainParameters(ecParams.getCurve(), ecParams.getG(), ecParams.getN(), ecParams.getH());
        RANDOM = new SecureRandom();
    }

    // 生成公钥
    static ECPublicKeyParameters generatePublicKey(BigInteger privateKey) {
        ECPoint point = DOMAIN_PARAMS.getG().multiply(privateKey);
        return new ECPublicKeyParameters(point, DOMAIN_PARAMS);
    }

    // 计算摘要值
    static byte[] hash(byte[] data) {
        SM3Digest digest = new SM3Digest();
        digest.update(data, 0, data.length);
        byte[] result = new byte[digest.getDigestSize()];
        digest.doFinal(result, 0);
        return result;
    }
}

运行结果:

3877a1b8e2c7d1e682f2d7a5b9d9c7a5b5c5d7b5d5a5a7d5f5a5e7a5a9d1c7d1b5c2d7b5d5a5a7d5a5d5e7d1e9e2a7f7d1d1a7a5a5f5c7d7a9a9e2a1f9e2c7d1b1c7d1b4d1c7d1f7d9c7b9d9e9e9d1b1d1d1c7d7b9d9c7a1d1e2b9e2c7d9e2b9f7d5a5d5e7d1f7d1e9e2c7d9e9d9c7d1b1c7d1f7d1e2a9f7d9e2a9e2a1f7d1e2a7d1f7d9e2a7d1c7b9f7d1e9d9c7a1d1c7a1d1e2c7d9e2a9f7d1e9d9e2a9f7d5e7a5f5a5f5c7b9e2c7d1e9d9c7d1b1c7b9d9c7d1e2a1d1e9d9c7d9c7d9e9d1d1c7d1e2a1d1c7b9f7d1e2a9d9c7d9c7d9e2a7d1f7d5a5d5e7d1e9d9e9c7d1b1c7d1e2a7d1e2a7d1c7b9e2c7d9e2a9e2a1f7d1e2a9d1e2a9e2a7d1e9d9e2a7d1e2c7b9d9e2c7d1e2a9d9c7d9e2c7d1b1c7d1e2a9f7d1b4d1b1c7d1f7d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a7d9e9d9c7d9e2c7d1e2a1d1e2a1f7d1e2a9d9c7d9e2c7d1e2a1d
字符串为partnerOrgId=PA63071119&project=YINKAKEJI182&fileType=1&urlType=1&uuid=b83e97e09fe903adfcb48f88edcd911b私钥为:ybEmSzNv0wKtVlLFRUknDYm3uuJueRfwFyEb8YU2ZM=使用国密SM2加密之后sign值为多少分别给出java和php版本demo和运行结果并转为h

原文地址: https://www.cveoy.top/t/topic/dxt7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录