首页 > 其他分享 >前端国密加密

前端国密加密

时间:2025-01-07 17:55:05浏览次数:1  
标签:const 前端 sm4 国密 签名 key 加密 encrypt

安装sm-crypto

npm install --save sm-crypto
参考一
const sm4 = require('sm-crypto').sm4; 
import { Base64 } from 'js-base64' 
// const key = 'facca33012345678facca33012345678' // 32字节 可以为 16 进制串或字节数组,要求为 128 比特
const key = '2YvDpbp6OwqZuxVF'

//base64转为16进制
function base64ToHex(base64) {
  const bytes = window.atob(base64)
  let hex = ''
  for (let i = 0; i < bytes.length; i++) {
    const byte = bytes.charCodeAt(i).toString(16)
    hex += byte.padStart(2, '0')
  }
  return hex
}

//将key加密并返回16进制
function changeKey() {
  const encodeBase64 = Base64.encode(key) //base64加密
  const hex = base64ToHex(encodeBase64)
  return hex
}


/*
 * text 待加密文本
 */
export function encrypt(text) {
  const params = JSON.stringify(text)
  const encrypt = sm4.encrypt(params, changeKey())
  return encrypt
}

/*
 * text 待解密密文
 */
export function decrypt(text) {
  const decrypt = sm4.decrypt(text, changeKey()) // 加密,不使用 padding,输出16进制字符串
  return decrypt
}

export default {
  encrypt,
  decrypt
}

参考二:

const sm4 = require('sm-crypto').sm4
const msg = 'hello world! 我是 juneandgreen.' // 可以为 utf8 串或字节数组
const key = '0123456789abcdeffedcba9876543210' // 可以为 16 进制串或字节数组,要求为 128 比特

let encryptData = sm4.encrypt(msg, key) // 加密,默认输出 16 进制字符串,默认使用 pkcs#7 填充(传 pkcs#5 也会走 pkcs#7 填充)
let encryptData = sm4.encrypt(msg, key, {padding: 'none'}) // 加密,不使用 padding
let encryptData = sm4.encrypt(msg, key, {padding: 'none', output: 'array'}) // 加密,不使用 padding,输出为字节数组
let encryptData = sm4.encrypt(msg, key, {mode: 'cbc', iv: 'fedcba98765432100123456789abcdef'}) // 加密,cbc 模式

签名/验签

签名:

const { sm2 } = require('sm-crypto'); 
const keyPair = sm2.generateKeyPairHex(); // 生成密钥对 
const publicKey = keyPair.publicKey; // 公钥 
const privateKey = keyPair.privateKey; // 私钥

const message = '这是要签名的消息'; // 替换为实际要签名的消息 
// 使用私钥对消息进行签名  
let sigValueHex = sm2.doSignature(message, privateKey); 
console.log('签名结果:', sigValueHex);

验签

const message = '这是要验证签名的消息'; // 应与签名时使用的消息相同  
const sigValueHex = '签名值'; // 替换为实际的签名值字符串,即签名步骤中生成的sigValueHex  
  
// 使用公钥验证签名是否有效  
let verifyResult = sm2.doVerifySignature(message, sigValueHex, publicKey);  
  
console.log('验签结果:', verifyResult); // 如果验证成功,应输出true;否则输出false

 

标签:const,前端,sm4,国密,签名,key,加密,encrypt
From: https://www.cnblogs.com/liumingwang/p/18658059

相关文章

  • 前端 Vue 后端返回流,前端通过流进行下载
    前端写法//文件下载asynchandleDownload(row){try{//假设文件是通过GET请求获取的,url为文件资源的API地址constresponse=awaitdownloadFile(row.id);//if(!response.ok){//thrownewError('网络错误,文......
  • 大学生HTML5期末作业 Web前端网页制作 html5+css3+js html+css+js网页设计 体育 腾讯
    大学生HTML5期末作业Web前端网页制作html5+css3+jshtml+css+js网页设计体育腾讯体育7个页面网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode、Sublime、Webstorm、Text、Notepad++等任意html编辑软件进行运行及修改编辑等操作)。获取源码1......
  • 大学生HTML5期末作业 html+css网页制作 新闻 自定义新闻主题2个页面 Web前端网页制作
    大学生HTML5期末作业html+css网页制作新闻自定义新闻主题2个页面Web前端网页制作html5+css3+js网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode、Sublime、Webstorm、Text、Notepad++等任意html编辑软件进行运行及修改编辑等操作)。获取源......
  • 前端学习openLayers配合vue3(圆形形状的绘制)
    上节课我们学了加载了矢量图片,这节我们来学绘制圆形关键代码,第一段呢是设置圆点的操作,第二步是点击地图获取地图位置来设置圆点,ol还有很多类,各种形状的//设置圆点//letanchorLayer=newVectorLayer({//source:newVectorSource(),//});//letanchorFeat......
  • 《前端开发必看!React .tsx vs Vue .vue:深度对比,选型不再纠结!》
    .tsx与.vue的区别......
  • 前端基础知识了解
    前端开发的三要素前端开发的三要素通常指的是HTML、CSS和JavaScript。 HTML(超文本标记语言):HTML是构建网页内容的基础,它使用标签来定义网页的结构和内容,如文本、图像、链接、表格等。例如,<p>标签用于定义段落,<img>标签用于插入图像。 CSS(层叠样式表):CSS用于控制网页的样式......
  • 自定义加密算法
    常见的哈希算法如Caesar,Base64,MurmurHash等已经被安全研究人员盯上了,经常使用这些算法作为特征定位恶意软件,因此最好使用自定义算法或不常见算法。base58加密cmd.exe#include<winsock2.h>#include<string.h>#include<stdio.h>#include<stdlib.h>constchar*const......
  • 面试高阶问题:对称加密与非对称加密的原理及其应用场景
    目录第一章对称加密原理及算法实现第二章非对称加密原理及算法实现第三章对称加密与非对称加密的应用场景第四章对称加密与非对称加密的应用实例第五章对称加密与非对称加密的对比分析第一章对称加密原理及算法实现1.1对称加密的原理对称加密,又称私钥加密......
  • 前端VUE首次加载错误类型
    今天我们就把所有前端VUE首次加载错误类型统一算一遍!:语法错误模板语法错误:在Vue的模板中使用了不正确的语法。如在插值表达式中少了花括号,或使用了错误的指令语法等。例如,{{message(少了一个花括号),或v-ifmessage="true"(少了冒号)。JavaScript语法错误:在Vue组件的脚本部......
  • Eureka加密 及Gateway搭建 - 基于SpringBoot不同版本配置方式
    前言:在最近开发过程中偶遇根据SpringBoot不同版本导致配置方式不一致等问题通用:Eureka服务配置Server端:一、引入依赖spring-boot-starter-security<dependencies> <!--Eureka声明依赖--><dependency><groupId>org.springframework.cloud</groupId>......