Node.js实现国密算法

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实现国密算法

node.js+gm-crypto算法实现流程图

SM2算法实现

具体代码如下:

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

const { publicKey, privateKey } = SM2.generateKeyPair()
const originalData = '20201325xjr'

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 = '20201325xjr'

/**
 * 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

最后的结果就是这样

posted @ 2022-11-26 16:43  20201325my  阅读(1113)  评论(1编辑  收藏  举报