java sm2实现

本文介绍了如何在Java中实现SM2加密算法。通过定义一个`SM2`类,设置了SM2所需的参数,并实现了加密、解密、签名和验证签名的方法。加密过程包括初始化、加密数据和最终操作。解密过程涉及将加密数据拆分并进行解密。签名生成通过SM3哈希和模运算计算,而验证签名则检查计算的签名是否匹配。
摘要由CSDN通过智能技术生成

SM2  java代码的实现。

public class SM2 {


    //正式参数
    public static String[] ecc_param = {
            "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF",
            "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC",
            "28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93",
            "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123",
            "32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7",
            "BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0"
    };

    private static SM2 instance;


    private BigInteger ecc_p;
    private BigInteger ecc_a;
    private BigInteger ecc_b;
    private BigInteger ecc_n;
    private BigInteger ecc_gx;
    private BigInteger ecc_gy;
    private ECCurve.Fp ecc_curve;
    private ECPoint.Fp ecc_point_g;
    private ECDomainParameters ecc_bc_spec;
    private ECKeyPairGenerator ecc_key_pair_generator;
    private ECFieldElement ecc_gx_fieldelement;
    private ECFieldElement ecc_gy_fieldelement;


    private BigInteger privateKey;
    private ECPoint publicKey;

    private SM2() {
        this.ecc_p = new BigInteger(ecc_param[0], 16);
        this.ecc_a = new BigInteger(ecc_param[1], 16);
        this.ecc_b = new BigInteger(ecc_param[2], 16);
        this.ecc_n = new BigInteger(ecc_param[3], 16);
        this.ecc_gx = new BigInteger(ecc_param[4], 16);
        this.ecc_gy = new BigInteger(ecc_param[5], 16);

        ecc_gx_fieldelement = new Fp(this.ecc_p, this.ecc_gx);
        ecc_gy_fieldelement = new Fp(this.ecc_p, this.ecc_gy);

        ecc_curve = new ECCurve.Fp(this.ecc_p, this.ecc_a, this.ecc_b);
        ecc_point_g = new ECPoint.Fp(this.ecc_curve, this.ecc_gx_fieldelement, this.ecc_gy_fieldelement);

 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值