首页 前端知识 js使用国密加密账号密码

js使用国密加密账号密码

2024-06-01 10:06:36 前端知识 前端哥 995 368 我要收藏

了解国密

国密算法是指中国自主研发的密码算法标准,也被称为“中国密码算法”。它们是由国家密码管理局发布和推广的一系列密码算法,包括对称加密算法(如SM1、SM4)、非对称加密算法(如SM2)、散列函数(如SM3)、签名算法等。

SM2是国产的椭圆曲线公钥密码算法,用于数字签名、密钥交换等。

SM3是国产的密码杂凑算法,用于数据完整性校验和消息认证。

SM4是基于分组密码结构的对称加密算法,用于保护机密信息的传输和存储。

使用

1、项目安装工具

npm install --save sm-crypto

2、封装方法

/**
 * 加解密的工具类
 * 使用:https://github.com/JuneAndGreen/sm-crypto
 *
 */
import smCrypto from 'sm-crypto';

const sm2 = smCrypto.sm2;
const sm3 = smCrypto.sm3;
const sm4 = smCrypto.sm4;
const cipherMode = 1; // 1 - C1C3C2,0 - C1C2C3,默认为1
const publicKey = '后端提供的公钥';
const privateKey = '后端提供的秘钥';
const key = '后端提供的key';

/**
 * 国密加解密工具类
 */
// SM2加密
export function doSm2Encrypt(msgString) {
  return sm2.doEncrypt(msgString, publicKey, cipherMode);
}
// SM2解密
export function doSm2Decrypt(encryptData) {
  return sm2.doDecrypt(encryptData, privateKey, cipherMode);
}
// SM2数组加密
export function doSm2ArrayEncrypt(msgString) {
  return sm2.doEncrypt(msgString, publicKey, cipherMode);
}
// SM2数组解密
export function doSm2ArrayDecrypt(encryptData) {
  return sm2.doDecrypt(encryptData, privateKey, cipherMode, { output: 'array' });
}
// SM3哈希
export function doSm3Hash(msgString) {
  return sm3(msgString);
}
// SM4 加密
export function doSm4Encrypt(msgString) {
  return sm4.encrypt(msgString, key);
}
// SM4 CBC加密
export function doSm4CbcEncrypt(msgString) {
  return sm4.encrypt(msgString, key, { mode: 'cbc', iv: 'fedcba98765432100123456789abcdef' }); //加密,cbc模式
}
// SM4 解密
export function doSm4Decrypt(encryptData) {
  return sm4.decrypt(encryptData, key);
}
// SM4 CBC解密
export function doSm4CbcDecrypt(encryptData) {
  return sm4.decrypt(encryptData, key, { mode: 'cbc', iv: 'fedcba98765432100123456789abcdef' }); //加密,cbc模式
}

3、业务中使用

比如后端要求调登录接口时,传过去的密码要使用国密加密。

import { doSm2Encrypt } from '@/utils/smCrypto.js';

<script>
  methods: {
  	onSubmit({ validateResult }) {
    const { account, password } = this.formData;
    const param = { account, password: doSm2Encrypt(password) };
    if (validateResult === true) {
      this.$request.post('/doLogin', param).then((res) => {
        console.log(res);
        if (res.code === 200) {
          this.$message.success('登录成功');
        } else {
          this.$message.error(res.msg);
        }
      });
    }
  }
}
</script>
转载请注明出处或者链接地址:https://www.qianduange.cn//article/10379.html
标签
评论
发布的文章

npmjs官网(查询依赖包)

2024-06-07 00:06:56

npx使用及原理

2024-06-07 00:06:36

npm 包管理工具

2024-06-07 00:06:33

vue 思极地图开发

2024-06-07 00:06:28

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!