国产sm2加密算法

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 国产sm2加密算法

1.后端加密解密

1.1 依赖包

<dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.54</version>
        </dependency>

1.2 后端加密解密

public static void main(String[] args) throws Exception {
        // 生成密钥对
        generateKeyPair();

        String plainText = "123";
        byte[] sourceData = plainText.getBytes();

        // 下面的秘钥可以使用generateKeyPair()生成的秘钥内容
        // 国密规范正式私钥
        String prik = "00D980117870CC52F5292E036D6BC78FF376B5C95B8AD0941A6FC851DA75B6E593";
        // 国密规范正式公钥
        String pubk = "03F9D45E97CA13EE0F2D57FB285ED9A5E99F4524BF6C851C7E460EAED9A29C57C9";

        System.out.println("加密: ");
        String cipherText = SM2Utils.encrypt(Util.hexToByte(pubk), sourceData);
        System.out.println(cipherText);
        cipherText="048393315e12462d0040b0b75cc032d5fd14ee3467eec447abdad26be165ad7459db40f2e26189f81359f4e91630be3d4a59edf5517d19fb0834bcc7a92107667282d5e5a0671241a6711be39a095aad7937195682b255af603796d225f8af25d4b01bbbbbda3ac719f7d6aa";
        System.out.println("解密: ");
        plainText = new String(SM2Utils.decrypt(Util.hexToByte(prik), Util.hexToByte(cipherText)));
        System.out.println(plainText);

    }

2.前端加密解密

2.1 前端依赖包

npm install --save sm-crypto

2.2 前端代码

获取密钥对

const sm2 = require('sm-crypto').sm2

let keypair = sm2.generateKeyPairHex()

publicKey = keypair.publicKey // 公钥
privateKey = keypair.privateKey // 私钥

// 默认生成公钥 130 位太长,可以压缩公钥到 66 位
const compressedPublicKey = sm2.compressPublicKeyHex(publicKey) // compressedPublicKey 和 publicKey 等价
sm2.comparePublicKeyHex(publicKey, compressedPublicKey) // 判断公钥是否等价

// 自定义随机数,参数会直接透传给 jsbn 库的 BigInteger 构造器
// 注意:开发者使用自定义随机数,需要自行确保传入的随机数符合密码学安全
let keypair2 = sm2.generateKeyPairHex('123123123123123')
let keypair3 = sm2.generateKeyPairHex(256, SecureRandom)

let verifyResult = sm2.verifyPublicKey(publicKey) // 验证公钥
verifyResult = sm2.verifyPublicKey(compressedPublicKey) // 验证公钥

加密解密

const sm2 = require('sm-crypto').sm2
const cipherMode = 1 // 1 - C1C3C2,0 - C1C2C3,默认为1

let encryptData = sm2.doEncrypt(msgString, publicKey, cipherMode) // 加密结果
let decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode) // 解密结果

encryptData = sm2.doEncrypt(msgArray, publicKey, cipherMode) // 加密结果,输入数组
decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode, {output: 'array'}) // 解密结果,输出数组

备注

开头为04,没有则字符串拼接上

相关文章
|
1月前
|
算法 安全 物联网
如何应用SM2算法进行身份认证
【10月更文挑战第5天】如何应用SM2算法进行身份认证
61 1
|
1月前
|
存储 算法 安全
SM2算法的应用场景有哪些?
【10月更文挑战第5天】SM2算法的应用场景有哪些?
72 1
|
6月前
|
算法 安全 Java
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
【4月更文挑战第28天】性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
227 1
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
|
20天前
|
算法 安全 物联网
关于SM2、SM3、SM4、SM9这四种国密算法
本文介绍了四种国密算法——SM2、SM3、SM4和SM9。SM2是一种基于椭圆曲线的非对称加密算法,用于数据加密和数字签名;SM3是哈希算法,用于数字签名和消息完整性验证;SM4是对称加密算法,用于数据加密和解密;SM9是基于标识的非对称密码算法,适用于物联网环境中的数据安全和隐私保护。
126 0
|
1月前
|
数据安全/隐私保护
sm2加密解密
sm2加密解密
43 3
|
6月前
|
NoSQL 测试技术 Go
【Golang】国密SM2公钥私钥序列化到redis中并加密解密实战_sm2反编(1)
【Golang】国密SM2公钥私钥序列化到redis中并加密解密实战_sm2反编(1)
|
6月前
|
算法 数据安全/隐私保护
软件体系结构 - 国产密码算法
软件体系结构 - 国产密码算法
41 3
|
11月前
|
算法 安全 物联网
CFCA证书——基于SM2/3算法的安全信任
CFCA证书——基于SM2/3算法的安全信任
206 0
CFCA证书——基于SM2/3算法的安全信任
|
存储 算法 前端开发
一文带你学会国产加密算法SM4的java实现方案
今天给大家带来一个国产SM4加密解密算法的java后端解决方案,代码完整,可以直接使用,希望给大家带来帮助,尤其是做政府系统的开发人员,可以直接应用到项目中进行加密解密。
3044 1
|
算法 数据安全/隐私保护
关于SM2算法工具的一点儿说明
关于SM2算法工具的一点儿说明