Vue实现SM4加密

本文介绍了如何在前端项目中配置ESLint规则,重点关注了生产环境下的控制台警告和debugger禁用。同时,展示了如何在Vue组件中使用SM4库进行数据加密,包括安装、引入和加密函数的使用。后端也需要安装SM4进行解密操作。

前端先看有无.eslintrc.js文件,添加 rules 和 ‘globals’

rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
  },
  "globals":{
    "base64js": true,
  }

安装SM4

npm install sm4util

新建utils文件,引入使用

//引入和使用
import {SM4Util} from "sm4util";
const sm4 = new SM4Util();
<template>
	<div>
		<input v-model="mobilePhone" placeholder="请输入手机号">
		<input v-model="password" placeholder="请输入密码">
	</div>
</template>
<script>
import {SM4Util} from '@/utils/sm4';
export default {
  name: "Register",
  data(){
    return{
      username: '',
      mobilePhone: '',
      password: '',
      rePassword: ''
    }
  },
  mounted() {
    const sm4 = new SM4Util();
    const test = sm4.encryptData_CBC('123456')
    console.log('123456的加密结果:' + test)
  },
  
methods:{
    register(){
        // sm4加密
        const sm4 = new SM4Util();
        this.$axios
            .post("/user/register", {
              mobilePhone: this.mobilePhone.trim(),
              password: sm4.encryptData_CBC(this.password.trim()),
            })
      }
    }
}
</script>

后端也需要安装相应的SM4,以此来解析

### Vue3 中实现 SM4 加密Vue3 项目中使用国密 SM4 进行加密解密,需先安装 `asmcrypto.js` 库,并将其引入到 Vue 组件内。下面展示一段基于此库的简单示例代码来完成字符串的加解密功能[^1]。 #### 安装依赖包 首先,在命令行工具里执行如下 npm 命令以添加所需的加密库: ```bash npm install asmcrypto.js --save ``` #### 创建加密服务文件 接着创建一个新的 JavaScript 文件用于封装 SM4 的方法,比如命名为 `sm4Service.js`: ```javascript// sm4Service.js import * as asmCrypto from 'asmcrypto.js'; const key = "0123456789abcdef"; // 此处应替换为更复杂的固定长度秘钥 export function encrypt(data) { const utf8Data = asmCrypto.utf8_string.to_bytes(data); const encryptedBytes = asmCrypto.sm4_cbc_encrypt(utf8Data, asmCrypto.utils.hex_to_u8a(key)); return Array.from(encryptedBytes).map(byte => ('0' + (byte & 0xFF).toString(16)).slice(-2)).join(''); } export function decrypt(cipherText) { try{ let cipherHex = Buffer.from(cipherText.match(/.{1,2}/g).reverse().join(''), 'hex'); const decryptedBytes = asmCrypto.sm4_cbc_decrypt(cipherHex, asmCrypto.utils.hex_to_u8a(key)); return String.fromCharCode(...decryptedBytes); } catch(error){ console.error("Decryption failed", error); throw new Error("Invalid ciphertext or key"); } } ``` #### 使用加密函数于组件内部 最后,在任何 Vue 组件中导入上述定义的服务来进行数据的安全处理: ```html<!-- MyComponent.vue --> <template> <div> Original Text: {{ original }} <br /> Encrypted Text: {{ encrypted }} <br /> Decrypted Text: {{ decrypted }} </div> </template> <script setup> import { ref, computed } from 'vue'; import * as sm4Util from './path/to/sm4Service'; let original = ref('Hello World!'); let encrypted = computed(() => sm4Util.encrypt(original.value)); let decrypted = computed(() => sm4Util.decrypt(encrypted.value)); </script> ``` 这段代码展示了如何在一个简单的 Vue3 单文件组件中调用自定义的 SM4 加密/解密逻辑。需要注意的是这里的例子仅作为概念验证用途;真实场景下应当更加注重安全性措施以及错误处理机制的设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值