氧气柠檬 發表於 2022-12-4 17:03:00

Node.js实现国密算法

<h2 id="一nodejs环境安装">一、node.js环境安装</h2>
<h3 id="1-去官网下载压缩包并放置到usrlocalbin文件夹下">1 去官网下载压缩包,并放置到/usr/local/bin文件夹下</h3>
<p><img src="https://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204162439391-2067505481.png" alt="" loading="lazy"></p>
<p><img src="https://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204162644966-117048824.png" alt="" loading="lazy"></p>
<h2 id="2-进行环境变量配置">2 进行环境变量配置</h2>
<pre><code>vim /etc/profile
</code></pre>
<p>在环境变量文件的末尾添加</p>
<pre><code>export NODEJS=/usr/local/bin/node-v16.18.1-linux-x64
export PATH=$PATH:$NODEJS/bin
</code></pre>
<p><img src="https://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204162900229-596516847.png" alt="" loading="lazy"></p>
<h2 id="3-验证安装情况">3 验证安装情况</h2>
<pre><code>node -v
npm -v
</code></pre>
<p>成功安装示例:<br>
<img src="https://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204163005325-613383131.png" alt="" loading="lazy"></p>
<h2 id="二gm-crypto-module下载">二、gm-crypto module下载</h2>
<pre><code>npm install gm-crypto
</code></pre>
<p>以下为正确示例:<br>
<img src="https://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204163322013-788125140.png" alt="" loading="lazy"></p>
<h2 id="三代码调试">三、代码调试</h2>
<h3 id="1-sm2">1 sm2</h3>
<p>首先进入root目录,查看刚刚下载的工作环境<code>node_modules</code><br>
<img src="https://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204163459301-361314350.png" alt="" loading="lazy"></p>
<p>进入路径node_modules,并创建sm2.js文件,验证代码如下:</p>
<pre><code>const { SM2 } = require('gm-crypto')

const { publicKey, privateKey } = SM2.generateKeyPair()
const originalData = '20201307lcy'

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://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204164100147-1011536020.png" alt="" loading="lazy"></p>
<p>编译指令:<code>node sm2.js</code></p>
<p><img src="https://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204164223518-1390716603.png" alt="" loading="lazy"></p>
<h3 id="2-sm3">2 sm3</h3>
<p>创建验证文件sm3.js</p>
<pre><code>vim sm3.js
</code></pre>
<pre><code>const { SM3 } = require('gm-crypto')

console.log(SM3.digest('20201307'))
console.log(SM3.digest('lcy'))
console.log(SM3.digest('12345678'))
</code></pre>
<p><img src="https://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204164757324-730565716.png" alt="" loading="lazy"></p>
<p>编译sm3.js</p>
<p><img src="https://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204164949458-928801773.png" alt="" loading="lazy"></p>
<p>在线网站验证:http://lzltool.cn/SM3<br>
<img src="https://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204165250317-1205702260.png" alt="" loading="lazy"></p>
<h3 id="3-sm4">3 sm4</h3>
<pre><code>vim sm4.js
</code></pre>
<p><img src="https://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204165826537-1043240685.png" alt="" loading="lazy"></p>
<pre><code>const { SM4 } = require('gm-crypto')

const key = '0123456789abcdeffedcba9876543210' // Any string of 32 hexadecimal digits
const originalData = '20201307lcy'

/**
* 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>
<pre><code>node sm4.js
</code></pre>
<p><img src="https://img2023.cnblogs.com/blog/2166439/202212/2166439-20221204165955608-246417235.png" alt="" loading="lazy"></p><br><br>
来源:https://www.cnblogs.com/yu15141310373/p/16950092.html
頁: [1]
查看完整版本: Node.js实现国密算法