长夜照无眠 發表於 2022-11-23 13:16:00

node.js 实现国密算法

<h2 id="nodejs-实现国密算法">node.js 实现国密算法</h2>
<h3 id="搭建node环境">搭建node环境</h3>
<h4 id="nodejs下载">node.js下载</h4>
<p>官网下载:http://nodejs.cn/download/<br>
<img src="https://img2022.cnblogs.com/blog/2166558/202211/2166558-20221122191631439-1940086194.png"></p>
<h4 id="解压">解压</h4>
<p><code>tar -xvf node-v18.12.1-linux-x64.tar.xz</code><br>
<img src="https://img2022.cnblogs.com/blog/2166558/202211/2166558-20221122193802845-1204056828.png"></p>
<h4 id="配环境变量">配环境变量</h4>
<pre><code>vi /etc/profile
</code></pre>
<p>最后加上这句话:<code>export PATH=$PATH:/usr/local/node/bin</code><br>
<img src="https://img2022.cnblogs.com/blog/2166558/202211/2166558-20221122194252373-1610102833.png"></p>
<p><strong>让新加的配置生效</strong>:<code>source /etc/profile</code></p>
<h4 id="配软连接">配软连接</h4>
<p>相当于全局变量,在任何文件夹都能查看版本信息</p>
<pre><code>ln -s /usr/local/node/bin/node /usr/local/bin/
ln -s /usr/local/node/bin/npm /usr/local/bin/
</code></pre>
<h3 id="成功搭建nodejs环境">成功搭建node.js环境</h3>
<p><img src="https://img2022.cnblogs.com/blog/2166558/202211/2166558-20221122192322406-542306170.png"></p>
<h3 id="代码实现">代码实现</h3>
<h3 id="通过gm-crypto密码算法库实现国密算法">通过gm-crypto密码算法库实现国密算法</h3>
<h4 id="安装gm-crypto">安装gm-crypto</h4>
<pre><code>npm install gm-crypto
</code></pre>
<h4 id="sm2">SM2</h4>
<pre><code>
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)
</code></pre>
<p><img src="https://img2022.cnblogs.com/blog/2166558/202211/2166558-20221123132642230-1505738311.png"></p>
<h4 id="sm3">SM3</h4>
<pre><code>const { SM3 } = require('gm-crypto')

console.log(SM3.digest('20201327'))
console.log(SM3.digest('ljm', 'base64'))
console.log(SM3.digest('415', 'hex', 'base64'))

</code></pre>
<p><img src="https://img2022.cnblogs.com/blog/2166558/202211/2166558-20221123132708524-1766419854.png"></p>
<h4 id="sm4">SM4</h4>
<pre><code>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)
</code></pre>
<p><img src="https://img2022.cnblogs.com/blog/2166558/202211/2166558-20221123132723515-2060224117.png"></p>
<h3 id="通过sm-crypto密码算法库实现国密算法">通过sm-crypto密码算法库实现国密算法</h3>
<h4 id="安装-sm-crypto">安装 sm-crypto</h4>
<pre><code>npm install --save miniprogram-sm-crypto
</code></pre>
<p><img src="https://img2023.cnblogs.com/blog/2166558/202212/2166558-20221204190938807-1202875308.png"></p>
<h4 id="sm2-1">sm2</h4>
<pre><code>const sm2 = require("miniprogram-sm-crypto").sm2;

let keypair = sm2.generateKeyPairHex();

publicKey = keypair.publicKey; // 公钥
privateKey = keypair.privateKey; // 私钥

const cipherMode = 1; // 1 - C1C3C2,0 - C1C2C3,默认为1

let encryptData = sm2.doEncrypt('20201327', publicKey, cipherMode); // 加密结果
console.log(encryptData)
let decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode); // 解密结果
console.log(decryptData)
</code></pre>
<p><img src="https://img2023.cnblogs.com/blog/2166558/202212/2166558-20221204191056590-2089620437.png"></p>
<h4 id="sm3-1">sm3</h4>
<pre><code>const sm3 = require("miniprogram-sm-crypto").sm3;

let hashData = sm3("20201327"); // 杂凑
console.log(hashData)
</code></pre>
<p><img src="https://img2023.cnblogs.com/blog/2166558/202212/2166558-20221204191120480-1069733445.png"></p>
<h4 id="sm4-1">sm4</h4>
<pre><code>const sm4 = require("miniprogram-sm-crypto").sm4;
const key = ;

let encryptData = sm4.encrypt("20201327", key); // 加密
console.log(encryptData)

let decryptData = sm4.decrypt(encrytData, key); // 解密

console.log(decryptData)
</code></pre>
<p><img src="https://img2023.cnblogs.com/blog/2166558/202212/2166558-20221204191601328-1233853680.png"></p><br><br>
来源:https://www.cnblogs.com/yycyhyhf/p/16911401.html
頁: [1]
查看完整版本: node.js 实现国密算法