首页 > 其他分享 >SM2前后端交互加解密(已联调测通)

SM2前后端交互加解密(已联调测通)

时间:2023-05-22 15:01:58浏览次数:40  
标签:调测 已联 Exception String ... privateKey 加解密 publicKey new

准备工作:后端(jar包)、前端(js文件)

阿里云盘:
所需文件: https://www.aliyundrive.com/s/wmYT1TMx4az

 

 1.后端java代码SM2工具类:

import com.antherd.smcrypto.sm2.Keypair;
import com.antherd.smcrypto.sm2.Sm2;
import io.netty.util.internal.StringUtil;

public class SM2Encryptor {
    /**
     * 加密,使用公钥
     *
     * @param publicKey
     * @param originalText
     * @return
     */
    public static String encryptText(String publicKey, String originalText) throws Exception {
        if (StringUtil.isNullOrEmpty(publicKey)) {
            throw new Exception("密钥不能为空...");
        }
        if (StringUtil.isNullOrEmpty(originalText)) {
            throw new Exception("明文不能为空...");
        }

        try {
            return Sm2.doEncrypt(originalText, publicKey);//HexUtil.encodeHexStr(cipherText); // 加密结果
        } catch (Exception e) {
            throw new Exception("加密错误:密钥不正确...");
        }
    }

    /**
     * 解密,使用私钥
     *
     * @param privateKey
     * @param cipherText
     * @return
     */
    public static String decryptText(String privateKey, String cipherText) throws Exception {
        if (StringUtil.isNullOrEmpty(privateKey)) {
            throw new Exception("密钥不能为空...");
        }
        if (StringUtil.isNullOrEmpty(cipherText)) {
            throw new Exception("明文不能为空...");
        }
        try {
            return Sm2.doDecrypt(cipherText, privateKey); // new String(sm2.decrypt(sourceData,prvKey)); // 解密结果
        } catch (Exception e) {
            throw new Exception("解密错误:密钥不正确...");
        }
    }

    /**
     * 获取sm2密钥对,
     *
     * @return 返回String[];第0个为公钥,第1个为私钥
     * @throws Exception
     */
    public static String[] generateKeyPair() throws Exception {
        try {
            Keypair keypair = Sm2.generateKeyPairHex();
            String[] result = new String[2];
            if (keypair != null) {
                result[0] = keypair.getPublicKey(); //公钥
                result[1] = keypair.getPrivateKey(); // 私钥
            }
            return result;
        } catch (Exception e) {
            throw new Exception("生成密钥对失败...");
        }
    }

    public static void main(String[] args) throws Exception {
        //调用内部jar方法,生成一对公私钥
        String[] keys = generateKeyPair();
        //公钥
        String publicKey = keys[0];
        System.out.println("公钥" + publicKey);
        //私钥
        String privateKey = keys[1];
        System.out.println("私钥" + privateKey);

        String str = "测试使用SM2加密、解密";

        //加密字符串
        String encryptText = SM2Encryptor.encryptText(publicKey, str);
        System.out.println(encryptText);
        //解密字符串
        String decryptText = SM2Encryptor.decryptText(privateKey, encryptText);
        System.out.println(decryptText);

    }

}

2.前端调用样例

<script>

    $(function () {
        //公钥
        var publicKey = "0496f201087c127de90a49496c8704b7e1d7aa10f12c8874711fcb6639cf617070bc16c5da0e2ef095f39b735837f9afd7df8965b0534023ac1345e6ab93bbe138";
        //私钥
        var privateKey = "0faa8deba74595e0aeb74718cb4b41ae40c3baeb25a0d335e95a19f69baf29d8";
        
        var str = "测试SM2加解密文本ZZ123";
        
        //加密
        var encrText = sm2.doEncrypt(str ,publicKey);
        console.log(encrText)

       //解密
       var decryptText = sm2.doDecrypt(encrText,privateKey)
       console.log(decryptText)
     })
</script>

 

标签:调测,已联,Exception,String,...,privateKey,加解密,publicKey,new
From: https://www.cnblogs.com/yyihan/p/17420629.html

相关文章

  • 从零玩转前后端加解密之SM2-sm2
    title:从零玩转前后端加解密之SM2date:2022-08-2119:42:00.907updated:2023-03-3013:28:48.866url:https://www.yby6.com/archives/sm2categories:-加密算法-从零玩转系列tags:-加密算法-sm2前言SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密......
  • 记一次解‘字符串加解密’算法
    题目:对输入的字符串进行加解密,并输出。加密方法为:当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;其他字符不做变化。解密方法为加密的逆过程。数据范围:输入的......
  • C# 实现RSA加解密
    一、支付宝工具生成公钥私钥下载地址链接:https://pan.baidu.com/s/15L1GM8mK43tzV9XyyNEV8Q提取码:vux3使用方法可参考阿里文档:https://docs.open.alipay.com/291/105971/二、加密说明:1.使用公钥加密, 2.加密后每次结果是可变的三、解密说明:1.使用私钥解密四、实现代码利用工具......
  • 【实战】国密4(SM4)使用 .NET 和 Java 相互加解密
    需求:由于朋友项目上需要和第三方对接,数据在传输过程中使用国密4(SM4)算法进行了加密,需要双方对数据进行加密和解密操作,第三方使用的是Java开发的项目,朋友使用的是.NET开发的项目。SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发......
  • 20 18 | 加解密服务平台:如何让敏感数据存储与传输更安全?
    你好,我是李智慧。在一个应用系统运行过程中,需要记录、传输很多数据,这些数据有的是非常敏感的,比如用户姓名、手机号码、密码、甚至信用卡号等等。这些数据如果直接存储在数据库,记录在日志中,或者在公网上传输的话,一旦发生数据泄露,不但可能会产生重大的经济损失,还可能会使公司陷入重......
  • 基于DNA序列的图像加解密算法仿真
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要       随着互联网和通信行业的快速发展,信息安全也越来越受关注,由此很多数据加密算法被提出,并被大量使用,例如AES算法,DES算法等,由于人在生活中所获得的信息大部分来自于视觉,图像就成为了人类......
  • [2core]加解密算法
    本文主要记录从.netframework迁移到.net6后,加解密算法的跨平台测试,如AES和RSA算法。因为RSA使用了BouncyCastle类库提供的实现,所以并没有遇到什么问题。完成加解密算法跨平台测试,迁移工作算是告一段,也标志着从.netframework迁移.net6工作完毕。迁移工作完毕,表示基于.netframewor......
  • 微信公众号消息加解密
    在微信公众号的使用过程中,为了提高信息传输的安全性,可以在服务器配置中将消息加解密模式指定为安全模式。启用安全模式后,公众号主动调用API的情况并不会受影响,只有被动回复用户的消息时才需要对消息进行加解密。官方提供了5种开发语言的示例代码,参照官方给的C++示例代码,本文给出......
  • SM2加解密工具
    创建秘钥对//生成随机秘钥对publicstaticSM2KeyPairVOgenerateKeyPair(){try{X9ECParameterssm2ECParameters=GMNamedCurves.getByName("sm2p256v1");ECDomainParametersdomainParameters=newECDomainParameters(sm2ECParameters.getCurve......
  • AES加解密
    AES加解密 https://www.cnblogs.com/SjhCode/p/AES.htmlAES加解密工具类  importjavax.crypto.Cipher;importjavax.crypto.spec.IvParameterSpec;importjavax.crypto.spec.SecretKeySpec;importjava.util.Objects;/***@author*@date2022/8/3115:......