国密sm2的Vue、Python、Java互通使用_java与vue使用sm2验签-程序员宅基地

技术标签: python  开发语言  

目录

一、Vue

二、Python 

三、Java


 

一、Vue

# npm install --save sm-crypto

import {sm2} from 'sm-crypto'
const cipherMode = 1
const private_key = 'd9d37f4f46e8514c6f9398a984e74f3eead994e8f4ac5f92e5deb313cb5ad6a6'
const public_key = '04' + 'e332ee43ac37be458550652fb9de9d58faf4bea2567534fda3319212a55b0732f5a9b7304b3a0127355ef98419b3a3598d0108611d658839e5d603abe01683ea'
let en_data = sm2.doEncrypt('123', public_key, cipherMode)
console.log(en_data)
let de_data = sm2.doDecrypt('6e10e194a2373d7d30a8f79d944fef516f2644076f7889560c5849c57b7c18f624a2e2d6c088459396aa9dbba71dd4fe242faa6a94cfb9b62ecbac537e894c3df67b62931ad511b050043e897719e332f708c24b9e137d3a87aebffc6ba4430e300d9a', private_key, cipherMode);
console.log(de_data)

二、Python 

pip install gmssl
from gmssl import sm2

# 16进制的公钥和私钥
private_key = '3037723d47292171677ec8bd7dc9af696c7472bc5f251b2cec07e65fdef22e25'
public_key = '04298364ec840088475eae92a591e01284d1abefcda348b47eb324bb521bb03b0b2a5bc393f6b71dabb8f15c99a0050818b56b23f31743b93df9cf8948f15ddb54'
cipherMode = 1
sm2_crypt = sm2.CryptSM2(public_key=public_key, private_key=private_key, mode=cipherMode)

UTF8 = 'utf-8'


def encrypt(data: str) -> str:
    # sm2 加密
    return sm2_crypt.encrypt(data.encode(UTF8)).hex()


def decrypt(data: str) -> str:
    # 解密
    return sm2_crypt.decrypt(bytes.fromhex(data)).decode(UTF8)


if __name__ == '__main__':
    # 解密
    s = decrypt(
        'c4eb975c40ea2f8dcdb78ba8900c5e617fb1186f9100fa5f8cbf2b59c40105a1f455018d174c99b65d9f3e439bc12be1aef884bf445d20d63de795bbb8b962b95c91f6fe7826c3d11387838741d319c4c8f227038e11ffb8f6f10ad52be0e02b516c6af45a4b')
    print(s)

三、Java

import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.BCUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;

import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * @author Created by ${USER} on ${YEAR}-${MONTH}-${DAY} ${TIME}:${SECOND}
 */
public class Main {

    static String pri = "d9d37f4f46e8514c6f9398a984e74f3eead994e8f4ac5f92e5deb313cb5ad6a6";
    static String pub = "e332ee43ac37be458550652fb9de9d58faf4bea2567534fda3319212a55b0732f5a9b7304b3a0127355ef98419b3a3598d0108611d658839e5d603abe01683ea";
    static SM2 sm2 = new SM2(BCUtil.toSm2Params(pri), BCUtil.toSm2Params(pub.substring(0, 64), pub.substring(64, 128)));

    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("./gm get\n" +
                    "./gm [en|de] [src] [dst]");
            System.exit(0);
        }
        if (args.length == 3) {
            if (!args[0].matches("en|de")) {
                System.out.println("mode err");
                System.exit(1);
            }
            en_de_f(args[1], args[2], args[0]);
        } else {
            if ("get".equals(args[0])) {
                System.out.println(getKeyPair());
            }
        }
    }

    public static void en_de_f(String src, String dst, String mode) {
        try (FileInputStream fileInputStream = new FileInputStream(src);
             FileOutputStream fos = new FileOutputStream(dst)) {
            if ("en".equals(mode)) {
                fos.write(sm2.encrypt(fileInputStream, KeyType.PublicKey));
            } else {
                fos.write(sm2.decrypt(fileInputStream, KeyType.PrivateKey));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static String getKeyPair() {
        SM2 sm2 = new SM2();
        return String.format("pri: %s\npub: %s", sm2.getDHex(), HexUtil.encodeHexStr(sm2.getQ(false)));
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wenxingchen/article/details/133928043

智能推荐

Win32 SDK Gui编程系列之--Win32 API通用控件_win32 sdk控件大全-程序员宅基地

文章浏览阅读147次,点赞2次,收藏2次。根据微软的信息,用CreateStatusWindow函数生成状态栏是古老的方法,现在建议使用CreateWindow函数。生成标签控件时,在窗口样式中添加TCS_HOTTRACK的话,当鼠标出现在标签上时,文字的颜色会发生变化。下图中,鼠标没有硬拷贝,但鼠标是CHF标签上方的状态,文字变成了天蓝色。同样,在窗口样式中添加TCS_BUTTONS的话,标签的形状会变成按钮的形状。只显示标签、控件的程序tabctrl.c和根据按下的标签进行显示的程序tabcontr0l.c和各自的执行结果如下所示。_win32 sdk控件大全

信息安全管理与评估赛题第2套_信息安全管理与评估赛项 单机取证镜像下载-程序员宅基地

文章浏览阅读237次。取证的信息可能隐藏在正常的、已删除的或受损的文件中,您可能需要运用编码转换技术、加解密技术、隐写技术、数据恢复技术,还需要熟悉常用的文件格式(如办公文档、压缩文档、图片等)。A集团的Linux服务器被黑客入侵,该服务器的Web应用系统被上传恶意软件,系统文件被恶意软件破坏,您的团队需要帮助该公司追踪此网络攻击的来源,在服务器上进行全面的检查,包括日志信息、进程信息、系统文件、恶意文件等,从而分析黑客的攻击行为,发现系统中的漏洞,并对发现的漏洞进行修复。_信息安全管理与评估赛项 单机取证镜像下载

最短路(简单)(待解决)_蓝桥杯 最短路 如下图所示,gg 是一个无向图,其中蓝色边的长度是 11、橘色边的长度-程序员宅基地

文章浏览阅读285次。python 练习题_蓝桥杯 最短路 如下图所示,gg 是一个无向图,其中蓝色边的长度是 11、橘色边的长度

CSS justify-content 属性_justify-content属性值-程序员宅基地

文章浏览阅读6.7w次,点赞40次,收藏267次。CSS 中的justify-content属性用于描述弹性盒子容器的对齐方式。它包含沿着分布在浏览器中的 flex 容器的主轴的内容项之间和周围的空间。注意:此属性不能用于沿垂直轴描述项目或容器。为了垂直对齐项目,我们可以使用align-items 属性在应用了 lengths 和 auto margins 属性后,对齐是可能的,即,如果在Flexbox 布局中至少有一个具有flex-grow 属性而不是 0 的灵活元素,那么它不会影响并且有任何影响不会有任何可用空间。句法:justi_justify-content属性值

JUC-CyclicBarrie(环形栅栏)_在 dc 中使用环形围栏库存-程序员宅基地

文章浏览阅读119次。CyclicBarrieCyclicBarrie与CountdownLatch相似,都可以用来模拟高并发场景,它可以用来阻塞每个线程,当满足某个条件之后释放线程,与CountdownLatch阻塞多个线程最后释放相似,例如显示生活中的开会,当所有人都到齐之后开始开会,每个线程都会执行阻塞之后也就是await方法之后的操作public static void main(String[] args) { final CyclicBarrier cyclicBarrier = new Cycl_在 dc 中使用环形围栏库存

进入页面获取不到audio/video属性值问题_获取不到audiooutput-程序员宅基地

文章浏览阅读1.3k次。有时候我们不用html5自带的视频/音频的控件,需要自定义, 这个时候可能就需要用到一些audio/video属性值。我们有个业务场景需要进入页面就获取音频的总时长, 但一直无法获取到,只有和页面产生交互才能获取,折腾了一段时间,总算解决了。 当音频/视频处于加载过程中时,会依次发生以下事件:loadstartdurationchangeloadedmetadataloadeddata..._获取不到audiooutput

随便推点

C语言获取硬件信息(CPU序列号,硬盘序列号,网卡IP、MAC地址、是否插入网线)_c获取cpu序列号-程序员宅基地

文章浏览阅读6.6k次,点赞6次,收藏69次。本文主要介绍Linux和Windows下使用C语言获取各种硬件信息,包括CPU序列号、硬盘序列号、网卡信息(包括网卡名字、IP地址、MAC地址、网卡是否插入网线等)。_c获取cpu序列号

【Elasticsearch】es 定期删除 已经删除的数据 物理删除 不是等待段合并-程序员宅基地

文章浏览阅读1.3k次。由于在Lucene中段具有不变性,所以删除一个文档后不会立即从硬盘中删除该文档,而是产生一个.del文件专门记录被删除的文档。而在检索的过程中,被删除的文件还会参与检索,只不过最后会被过滤,如果被删除的文件太多,则也会影响查询的效率。【Elasticsearch】Elasticsearch如何物理删除给定期限的历史数据?我们知道删除数据会在段合并的时候,进行物理删除,参考【Elasticsearch】elasticsearch 段 segment 段合并。

RS232/UART_rs232为啥是负逻辑-程序员宅基地

文章浏览阅读866次。了解UART1.serial communication  Serial communication is a communication method that uses one or two transmission lines to send and receive data, and that data is continuously sent and received one b..._rs232为啥是负逻辑

SQL 统计日环比、周同比_日环比周同比-程序员宅基地

文章浏览阅读1.9w次,点赞8次,收藏30次。date gmv 2019-01-01 115.7 2019-01-02 180.1 2019-01-03 296.8 2019-01-04 706.0 2019-01-05 703.5 2019-01-06 527.3 2019-01-07 462.9 2019-01-08 270.1 2019-01-09..._日环比周同比

【Java-Bug】JDK没有javax.annotation.jar包解决方案,无法使用@Resource解决方案-程序员宅基地

文章浏览阅读2.9w次,点赞69次,收藏73次。高版本JDK没有javax.annotation.jar包解决方案,高版本JDK无法使用@Resource解决方案_javax.annotation

对象存储与块存储、文件存储等对比-程序员宅基地

文章浏览阅读471次。看到 一篇文档, 讲 对象存储, 好奇,搜索文章,摘抄,学习记录 !背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结构化内容设计或优化、成本过高、并非PB级的扩展、不支持永远在线、专有的一体机设备等等,非结构化数据以每年60%~80%的速率增长,从而可扩展性变成了最迫切的需求。传统存储在面对海量非结构化数据时,..._对象存储连接协议相比文件存储使用复杂。

推荐文章

热门文章

相关标签