js使用国密加密账号密码

了解国密

国密算法是指中国自主研发的密码算法标准,也被称为“中国密码算法”。它们是由国家密码管理局发布和推广的一系列密码算法,包括对称加密算法(如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>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值