2014 年国务院办公厅就颁发了《国务院办公厅转发密码局等部门关于金融领域密码应用指导意见》,指出在我国涉及到金融领域信息安全的产品和系统要自主可控,在金融领域使用国产加密标准是机构走向合规化的重要一步。常用的国密算法包括:SM2、SM3、SM4等。

特性

  • 兼容 Node.js & Browsers 环境
  • 支持多种数据类型 String & ArrayBuffer & Buffer
  • 支持多种编码 hex & utf8 & base64

安装

  • npm
npm install gm-crypto
  • yarn
yarn add gm-crypto

快速开始

浏览器端写法调整为 import { SM2, SM3, SM4 } from 'gm-crypto'

SM2

const { SM2 } = require('gm-crypto')const { publicKey, privateKey } = SM2.generateKeyPair()
const originalData = 'SM2 椭圆曲线公钥密码算法'const encryptedData = SM2.encrypt(originalData, publicKey, {inputEncoding: 'utf8',outputEncoding: 'base64'
})const decryptedData = SM2.decrypt(encryptedData, privateKey, {inputEncoding: 'base64',outputEncoding: 'utf8'
})

SM3

const { SM3 } = require('gm-crypto')console.log(SM3.digest('abc'))
console.log(SM3.digest('YWJj', 'base64'))
console.log(SM3.digest('616263', 'hex', 'base64'))

SM4

const { SM4 } = require('gm-crypto')const key = '0123456789abcdeffedcba9876543210' // Any string of 32 hexadecimal digits
const originalData = 'SM4 国标对称加密'/*** Block cipher modes:* - ECB: electronic codebook* - CBC: cipher block chaining*/let encryptedData, decryptedData// ECB
encryptedData = SM4.encrypt(originalData, key, {inputEncoding: 'utf8',outputEncoding: 'base64'
})
decryptedData = SM4.decrypt(encryptedData, key, {inputEncoding: 'base64',outputEncoding: 'utf8'
})// CBC
const iv = '0123456789abcdeffedcba9876543210' // Initialization vector(any string of 32 hexadecimal digits)
encryptedData = SM4.encrypt(originalData, key, {iv,mode: SM2.constants.CBC,inputEncoding: 'utf8',outputEncoding: 'hex'
})
decryptedData = SM4.decrypt(encryptedData, key, {iv,mode: SM2.constants.CBC,inputEncoding: 'hex',outputEncoding: 'utf8'
})

详情参考 https://github.com/byte-fe/gm-crypto

国密 sm2,sm3,sm4 算法纯 JavaScript 实现相关推荐

  1. 国密SM2,SM3,SM4的前后台(js和java)加解密写法

    目录 SM2加解密 js java SM3加密 js java sm3前后台(js/java)加密不一致原因 SM4加解密 js java 之前做一个项目的时候需要用到国密SM2,SM3,SM4的加解 ...

  2. OpenSSL 1.1.1 新特性: 全面支持国密SM2/SM3/SM4加密算法

    OpenSSL项目最近6个月添加了许多新特性, 包括对中国SM2/SM3/SM4算法的支持: SM2椭圆曲线: https://github.com/openssl/openssl/pull/4793 ...

  3. php gmssl,支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱GmSSL

    GmSSL概述 GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法.SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码 ...

  4. java sm_Java国密SM2/SM3/SM4及证书

    1. 使用BC库1.59版本已经可以支持国密算法SM2/SM3/SM4,某大神写的详细测试例子:https://github.com/ZZMarquis/gmhelper 2. 制作证书参考网上资料简 ...

  5. java sm9_一个支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱

    The GmSSL Project 网址:http://gmssl.org/docs/quickstart.html 在网上闲逛时发现一个工具.SSL支持国密算法.看着比较高大上.还没有用呢.记下来. ...

  6. 通过网页查看服务器算法,服务器使用国密(SM2/SM3/SM4)证书,通过浏览器访问

    1. Apache + Gmssl Apache 本身不支持国密,需要修改代码支持GMTLS 下载解压: wget http://archive.apache.org/dist/httpd/httpd ...

  7. 服务器使用国密(SM2/SM3/SM4)证书,通过浏览器访问

    1. Apache + Gmssl Apache 本身不支持国密,需要修改代码支持GMTLS 下载解压: wget http://archive.apache.org/dist/httpd/httpd ...

  8. PB实现国密SM2/SM3/SM4算法(DLL方式)

    文章目录 SM4 SM4简介 分组加密模式ECB与CBC ECB模式加密解密 CBC模式加密解密 SM3 SM3简介 SM3摘要生成 SM3WithSM2摘要生成 SM2 SM2简介 SM2签名与验签 ...

  9. 前端使用国密sm2和sm4进行加解密

    国密SM加密 国密SM:国密算法,即国家商用密码算法.是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准.如SM系列密码,SM代表商密,即商业密码,是指用于商业的 ...

最新文章

  1. git上传自己的代码
  2. 将数据文件附加到数据库
  3. 阿里云容器服务新增支持Kubernetes编排系统,性能重大提升
  4. 操作系统:用户态和核心态的区别
  5. RHEL 6.x 搭建企业级FTP
  6. iOS - OC PList 数据存储
  7. Bootstrap3 警告框插件的使用方法
  8. php持久对象,php-在理论中具有两个外来身份的持久对象
  9. 电商系统设计之商品 (下)
  10. android服务器接口测试,使用Retrofit和Mockito进行可靠的Android API测试
  11. 大数据应用存在哪些安全隐患
  12. 设计师 VR 成型设计知识收集
  13. Docker简介(转)
  14. JDK+TOMCAT+MYSQL图文安装指南(一)
  15. Codeforces D. Genius‘s Gambit
  16. QT之二维码生成以及识别
  17. 泛微8.0前端通用代码
  18. 火车售票系统(设计模式分析)
  19. 数据猿·金猿榜丨2017工业大数据领域最具潜力创业公司
  20. NVIDIA边缘端设备(nano、tx2、xavier等)查看安装的jetpack版本

热门文章

  1. 怎样在应用中实现自助报表功能
  2. 孔庆东看金庸小说的奇情怪恋
  3. studio和solo哪个好_使用点评曝光beats studio3和solo pro有何区别?哪个好?图文评测详情如何...
  4. 模块电路选型(1)----电源模块
  5. Bugku-CTF之细心 (想办法变成admin)
  6. AJAX的全称是什么? 介绍一下AJAX
  7. 宽带不能上传发文件_光纤宽带和普通宽带的区别
  8. iphone微信小程序底部预留bar安全距离css
  9. python微信好友_python 获取微信好友列表的方法(微信web)
  10. CSS【进阶】线性径向渐变background-image:linear-gradient();background-image:radial-gradient();