SM2、SM3、SM4 メソッドを使用したフロントエンドの国家機密の暗号化と復号化

   国家機密アルゴリズム、つまり国家商用暗号化アルゴリズム。これは、国家暗号管理局によって承認および公開された暗号アルゴリズム標準およびそのアプリケーション仕様であり、その一部は国際標準になっています。SMシリーズの暗号のように、SMは商用秘密、つまり商用暗号の略で、商業に使用され、国家機密を含まない暗号技術を指します。

     くだらない話はやめて 乾物に直行

 ナショナル シークレット SM のインストール方法

プロジェクトにバージョンの問題がある可能性があります。このダウングレードを使用してインストールします (後のインストールの問題についても同様です)。

npm install --save sm-crypto   或  npm install --save sm-crypto --legacy-peer-deps   

1. SM2 は非対称暗号化アルゴリズムです。

楕円曲線暗号に基づく公開鍵暗号アルゴリズム規格で、秘密鍵の長さは 256 ビットで、デジタル署名、鍵交換、公開鍵暗号を含み、RSA/DH/ECDSA/ECDH などの国際アルゴリズムを置き換えるために使用されます。電子認証サービスシステムなどの適用要件を満たすことができ、2010 年 12 月 17 日に国家暗号管理局によって公開されました。

SM2が採用しているのはECC 256ビットの1つで、セキュリティ強度はRSA 2048ビットより高く、動作速度はRSAより高速です。


    SM2で使い方を紹介 

const sm2 = require('sm-crypto').sm2
const cipherMode = 1 // 1 - C1C3C2,0 - C1C2C3,默认为1 
****后端的话可以约定但后端默认加密方法好像是0 - C1C2C3****
在解密时 使用的密钥和密位一般是传输过来的,密文传输得来的话开头会由04 
需要删除,同时密钥可能存在必须小写的情况 key.slice(2).toLocaleLowerCase() 可以使用这个方法

let encryptData = sm2.doEncrypt(msgString, publicKey, cipherMode) // 加密结果

let decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode) // 解密结果

下面的一般特殊情况才会用到
encryptData = sm2.doEncrypt(msgArray, publicKey, cipherMode) // 加密结果,输入数组

decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode, {output: 'array'}) // 解密结果,输出数组

2. SM3 は暗号化ハッシュ アルゴリズムです (完全性を確保するためにデータ ダイジェストに使用されます)。

  MD5/SHA-1/SHA-2などの国際アルゴリズムを置き換えるために使用され、デジタル署名と検証、メッセージ認証コードの生成と検証、乱数生成に適しており、電子認証サービスのアプリケーション要件を満たすことができます。 2010年12月に発売されたシステムやその他のアプリケーションで、17日にリリースされました。

SHA-256をベースに改良・実装したアルゴリズムで、Merkle-Damgard構造を採用し、メッセージ群の長さは512bit、出力ダイジェスト値の長さは256bitです。

使い方を紹介 
  

const sm3 = require('sm-crypto').sm3
    this.loginForm = sm3(this.loginForm) //获得摘要后的数据

3. SM4はブロック暗号化アルゴリズム(対称暗号化方式)

  SM1 と同様に、DES/AES などの国際的なアルゴリズムを置き換えるために、自国が独自に設計したブロック対称暗号アルゴリズムです。SM4 アルゴリズムと AES アルゴリズムは同じキー長とパケット長を持ち、どちらも 128 ビットです。2012 年 3 月 21 日にリリースされ、暗号化アプリケーションでブロック暗号を使用する要件に適用されます。
暗号化

const sm4 = require('sm-crypto').sm4
const msg = '你好,我是空空.' // 可以为 utf8 串或字节数组
const key = 'facca330123456789abcdas3210' // 可以为 16 进制串或字节数组,要求为 128 比特

前后端约定一种下面的加密方法
let encryptData = sm4.encrypt(msg, key) // 加密,默认输出 16 进制字符串,默认使用 pkcs#7 填充(传 pkcs#5 也会走 pkcs#7 填充) 
let encryptData = sm4.encrypt(msg, key, {padding: 'none'}) // 加密,不使用 padding
let encryptData = sm4.encrypt(msg, key, {padding: 'none', output: 'array'}) // 加密,不使用 padding,输出为字节数组
let encryptData = sm4.encrypt(msg, key, {mode: 'cbc', iv: 'fedcba98765432100123456789abcdef'}) // 加密,cbc 模式


解読する

const sm4 = require('sm-crypto').sm4
const encryptData = '这里放加密后的数据' // 可以为 16 进制串或字节数组
const key = 'abcdeffedcba98765432100123456789' // 可以为 16 进制串或字节数组,要求为 128 比特

用约定的解密方法解密

let decryptData = sm4.decrypt(encryptData, key) // 解密,默认输出 utf8 字符串,默认使用 pkcs#7 填充(传 pkcs#5 也会走 pkcs#7 填充)
let decryptData = sm4.decrypt(encryptData, key, {padding: 'none'}) // 解密,不使用 padding
let decryptData = sm4.decrypt(encryptData, key, {padding: 'none', output: 'array'}) // 解密,不使用 padding,输出为字节数组
let decryptData = sm4.decrypt(encryptData, key, {mode: 'cbc', iv: 'fedcba98765432100123456789abcdef'}) // 解密,cbc 模式

4.baser64

  通常、上記のものは baser64 と混合して、
  baser64 インストールの一部を使用します。

npm install --save js-base64 

npm install --save js-base64  --legacy-peer-deps  


main.jsに導入方法 
を追加 

import {Base64} from 'js-base64'
Vue.prototype.$Base64 = Base64;


手順 

 let password='asdahsjdj'
 let encPass=this.$Base64.encode(password);//加密
 let decPass=this.$Base64.decode(encPass);//解密

最初は、フロントエンドの使い方を調べるために検索で頭が痛くなり、バックエンドの暗号化と復号化のテストに協力するために、さらに頭が痛くなりました。

この方法を使用する場合、フロントエンドとバックエンドで暗号化および復号化キーの形式の一貫性を維持することが重要です。

npm URL を添付します: https://www.npmjs.com/package/sm-crypto?activeTab=explore

おすすめ

転載: blog.csdn.net/KO_____KO/article/details/127126908