国密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

智能推荐

pandas插入mysql库_将pandas的DataFrame数据写入MySQL数据库 + sqlalchemy-程序员宅基地

文章浏览阅读215次。将pandas的DataFrame数据写入MySQL数据库 + sqlalchemyimportpandasaspdfromsqlalchemyimportcreate_engine##将数据写入mysql的数据库,但需要先通过sqlalchemy.create_engine建立连接,且字符编码设置为utf8,否则有些latin字符不能处理yconnect=create_engin..._pandas questdb create_engine

React Native之Modal实现自定义Dialog_react-native-paper 中的dialog-程序员宅基地

文章浏览阅读1.1w次。针对普通的弹框,React Native(RN)给我们提供了有Alert,但使用局限性很大,没有办法自定义,要实现自定义的弹框,我们应该如何来实现呢,这里提供两种方法:第一就是native本地来实现,然后暴露给RN来条用,第二就是使用组件Modal来实现,第一种方法这里就不写了,这里讲解下用Modal如何来实现。 首先我们先来了解下Modal是什么。 Modal组件可以_react-native-paper 中的dialog

龙芯1B:有源蜂鸣器播放音乐例程-程序员宅基地

文章浏览阅读4.1k次,点赞3次,收藏26次。龙芯1b:有源蜂鸣器播放音乐例程。_有源蜂鸣器播放音乐

【渝粤题库】广东开放大学 应急管理 形成性考核_从处置主体来说,现代社会突发事件处置常常涉及-程序员宅基地

文章浏览阅读3.6k次。选择题题目:()是突发公共事件应急管理工作的最高行政领导机构。题目:以下突发公共事件中,属于公共安全事件的是()?题目:我们赖以生活的价值是天生的,包括真、善、美在内的人类的古老价值,以及后来的愉快、正义和欢乐等价值,是人类本性固有的,这种观点体现了()?题目:“大安全”是指(),是最高决策机构,是俄罗斯国家安全的中枢机构,并且该机构设有宪法安全、国际安全、信息安全、经济安全等12个部门委员会。题目:美国应急处置管理体系的特征是()?题目:以下突发公共事件中,属于公共卫生事件的是()?题目:以_从处置主体来说,现代社会突发事件处置常常涉及

ADNI数据集-数据分析11.17-程序员宅基地

文章浏览阅读2.9k次,点赞5次,收藏25次。4850名认知正常/正常衰老老年人(CN),CN参与者是ADNI研究中的对照受试者,他们没有表现出抑郁,轻微认知障碍或痴呆的迹象。2968名早期轻度认知障碍患者(EMCI),5236名晚期轻度认知障碍患者(LMCI),1738名阿尔兹海默症。1416名重要记忆关注/主观记忆疾病(SMC),解决健康老年人对照组与MCI之间的差距。是“Relative IDentifier”的英文缩写,相对标识符的意思;colprot origprot 和蛋白有关的医学术语;是医学研究上经常使用的数据集;_adni数据集

Druid 介绍及配置_druid 1.1.9功能清单-程序员宅基地

文章浏览阅读228次。原文地址: https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98_druid 1.1.9功能清单

随便推点

如何用hugo搭建一个个人博客网站_hugo 博客 官网-程序员宅基地

文章浏览阅读1.4k次。hugo是由Go语言实现的静态网站生成器。简单、易用、高效、易扩展、快速部署。官网地址:https://gohugo.io/中文文档:https://www.gohugo.org/参考视频:手把手教你从0开始搭建自己的个人博客-CodeSheep这个项目,主要是通过hugo来搭建一个属于自己的个人博客网站。官网有现成的博客主题可供下载,对于想快速拥有一个个人主页或搭建一个网站的程序猿来说,是个不二之选~这是我搭建的一个比较基础的博客网站,大家可以先看看效果是怎样的博客地址:https://._hugo 博客 官网

Microsoft Dynamics 365 CE 扩展定制 - 1. 无代码扩展-程序员宅基地

文章浏览阅读229次。商用现货产品(COTS)对企业组织来说是有吸引力的选择,因为它们包含了可配置的开箱即用功能,可以在不编写任何代码的情况下满足大部分业务需求。Dynamics 365也不例外。Dynamics CRM 365专门提供功能强大的模块化功能丰富的产品,可根据您的组织需求进行定制。一般来说,随着产品的发展,可配置的无代码扩展实现起来更便宜,维护起来更容易,升级起来也更容易。正确建模,这些扩展可以大大提高您的投资价值。如果建模不正确,它们可能会导致平台只锁定一个目的。_dynamics 365 ce

忘记 SQL Server 管理员密码的处理_找回sqlsever本地服务器管理员-程序员宅基地

文章浏览阅读1w次。如果忘记 SQL Server 管理员密码,可以使用下面的方式处理 1. 使用 SQL Server 服务器计算机本地 Administrators 组的任何成员登录到 SQL Server 服务器 2. 确定忘记管理员密码的 SQL Server 服务 可以在服务(services.msc)里面查看,或者使用下面的 Powershell 命令 Get-Service | ? Displ_找回sqlsever本地服务器管理员

二值化-程序员宅基地

文章浏览阅读3.7k次。一、二值化的定义从维基百科拿过来的定义:二值化是图像分割的一种方法。在二值化图象的时候把大于某个临界灰度值的像素灰度设为灰度极大值,把小于这个值的像素灰度设为灰度极小值,从而实现二值化。根据阈值选取的不同,二值化的算法分为固定阈值和自适应阈值。 比较常用的二值化方法则有:双峰法、P参数法、迭代法和OTSU法等。二、 二值化的算法这里就简单讲一下固定阈值的算法:..._二值化

Django PostgreSQL安装和设置-程序员宅基地

文章浏览阅读1.3k次。We’ll know that SQLite is very powerful, embedded relational database management system and it offers a really amazing set of tools to manage approximately all sorts of data. But when it comes Multi-u..._postgresql django

XML解析之DOM解析_dom解析xml-程序员宅基地

文章浏览阅读2.4k次,点赞3次,收藏19次。xml文件的DOM解析_dom解析xml

推荐文章

热门文章

相关标签