首页 > 编程语言 >Node.js实现国密算法

Node.js实现国密算法

时间:2022-11-26 16:57:41浏览次数:62  
标签:Node node const log js 国密 encryptedData console

Node.js安装

Node.js下载

下载地址

Node.js解压

使用以下指令进行解压

tar -xvf node-v18.12.1-linux-x64.tar.xz

Node.js配置

首先将node文件移至/usr/local/bin文件夹下

mv node-v16.18.1-linux-x64 /usr/local/bin

随后进行配置环境变量

vi /etc/profile

配置这两个环境变量,PATH若有其他变量使用:进行断开即可

配置软连接(未把node移至usr/local/bin的进行)

为了使nodejs能够全局使用,我们需要配置一下软链接(类似于快捷方式,如果安装的路径在/usr/local/bin/下不需要这一步操作),当然也是软连接到用户目录下/usr/local/bin/

软链接的命令很简单: ln -s 源文件 目标路径

使用以下指令进行软连接

ln -s 'nodejs路径'/bin/node /usr/local/bin/
ln -s 'nodejs路径'/bin/npm /usr/local/bin/

Node.js验证安装

使用以下指令进行验证,若未报错则安装成功!!!

node -v
npm -v

gm-crypto module下载

使用npm install gm-crypto指令进行下载

Node.js实现国密算法

SM2算法实现

具体代码如下:

const { SM2 } = require('gm-crypto')

const { publicKey, privateKey } = SM2.generateKeyPair()
const originalData = '20201327ljm'

const encryptedData = SM2.encrypt(originalData, publicKey, {
  inputEncoding: 'utf8',
  outputEncoding: 'base64'
})
console.log(encryptedData)

const decryptedData = SM2.decrypt(encryptedData, privateKey, {
  inputEncoding: 'base64',
  outputEncoding: 'utf8'
})
console.log(decryptedData)

使用node指令进行编译运行文件

node sm2.js

最后的结果就是这样

SM3算法实现

具体代码如下:

const { SM3 } = require('gm-crypto')

console.log(SM3.digest('20201325'))
console.log(SM3.digest('xjr'))
console.log(SM3.digest('112233'))

使用node指令进行编译运行文件

node sm3.js

经验证发现摘要值一样,算法实现准确

最后的结果就是这样

SM4算法实现

具体代码如下:

const { SM4 } = require('gm-crypto')

const key = '0123456789abcdeffedcba9876543210' // Any string of 32 hexadecimal digits
const originalData = '20201327ljm'

/**
 * Block cipher modes:
 * - ECB: electronic codebook
 * - CBC: cipher block chaining
 */

let encryptedData, decryptedData

// ECB
encryptedData = SM4.encrypt(originalData, key, {
  inputEncoding: 'utf8',
  outputEncoding: 'base64'
})
console.log(encryptedData)

decryptedData = SM4.decrypt(encryptedData, key, {
  inputEncoding: 'base64',
  outputEncoding: 'utf8'
})
console.log(decryptedData)


console.log('\n')


// CBC
const iv = '0123456789abcdeffedcba9876543210' // Initialization vector(any string of 32 hexadecimal digits)
encryptedData = SM4.encrypt(originalData, key, {
  iv,
  mode: SM4.constants.CBC,
  inputEncoding: 'utf8',
  outputEncoding: 'hex'
})
console.log(encryptedData)

decryptedData = SM4.decrypt(encryptedData, key, {
  iv,
  mode: SM4.constants.CBC,
  inputEncoding: 'hex',
  outputEncoding: 'utf8'
})
console.log(decryptedData)

使用node指令进行编译运行文件

node sm4.js

最后的结果就是这样

标签:Node,node,const,log,js,国密,encryptedData,console
From: https://www.cnblogs.com/1314xhuan/p/16927709.html

相关文章

  • TypeScript学习笔记-04 tsconfig.json配置文件
    tsconfig.json一般常用的配置如下所示,可以按需要进行配置。{/*tsconfig.json是ts编译器的配置文件,ts编译器可以根据他的信息来对代码进行编译//in......
  • Newtonsoft.Json null值不序列化
    varjSetting=newJsonSerializerSettings{NullValueHandling=NullValueHandling.Ignore};varjson=JsonConvert.SerializeObject(response,Formatting.Indented,j......
  • JS——全局方法
    Number(转换为数值)无法转换的为NaN类型x=true;Number(x);//返回1x=false;Number(x);//返回0x=newDate();Number(x);//......
  • servlet中处理json
    使用fastJson<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.28</version></dependency>1.getjson数据@Overr......
  • 好消息 突破:IM开源项目OpenIM采用wasm技术实现jssdk
    OpenIM客户端sdk用golang实现,同时采用sqlite存储本地聊天记录,通过gomobile生成sdk,供iOSAndroid调用,达到了了一套代码多端复用的效果。最近融合wasm技术,让浏览器具备存储......
  • windows下更新node版本
    别听网上瞎忽悠,什么npminstall-gn,用n模块去升级稳定版,没用,只适合于linuxwindows下升级直接去官网 下载|Node.js(nodejs.org) 下载新包覆盖原来的即可如果出现npm......
  • 微服务、gGRPC、protobuf、rest和json
    微服务、gGRPC、protobuf、rest和json到目前为止,基于REST的API已经成为大多数服务间通信的首选架构。虽然基于REST/JSON的通信有几个好处,并且得到跨语言和提供......
  • js文件模块化引用问题(JavaScript modules)
    有个前端项目,需要用到配置文件。这个配置文件实在是太大了,就想拆成多个小的,然后一一引入,组合成一个完整的配置文件。如果是vue代码,这种情况根本是手到擒来,不费吹灰之力,而该......
  • 【个人笔记】Nestjs使用TypeORM注意点
    在Nestjs使用TypeORM还是有一些注意点。entities路径配置注意点在nestjs中使用TypeORM,需要配置数据库连接(以MySQL为例)。需要特别注意的是配置参数里面的entities字段:{......
  • JS——数字
    数字类型:书写数值时带不带小数点均可可以使用科学计数法来写超大或超小的数值数值使用以双精度浮点数来存储,根据国际IEEE754标准整数会被精确到15位,小数最大数17位,0.......