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
最后的结果就是这样