vue3+crypto-js插件实现对密码加密后传给后端

最近在做项目的过程中又遇到了一个新的问题,在实现后端管理系统的个人信息页面中,涉及到修改密码的功能,刚开始我直接通过传参的方式将修改的密码传入给后端,可是后端说需要将原密码、新密码以及确认密码都进行加密处理,害这下好了,这咋搞啊。自己之前没涉及过这个啊,话虽如此但这页面毕竟是咱做的啊,总不能说摆手不做放置不管嘛。方法总比困哪多这也难不倒我,于是乎上网查呀查,搜集了很多的资料,终于功夫不负有心人,嘿解决了。这等好事岂能我一人知道,不得分享给大家啊,好了现在咱们就一起共享吧!

(1)搭建修改密码框架

在开始之初呢先是搭建修改密码这一板块的框架,以下是为演示方便做的参考:

<template>
    <!-- 修改密码 -->
    <div class="edit-password">
      <div class="edit-title">
        <p class="title">修改密码</p>
      </div>
      <div class="edit-conten">
        <a-form ref="formRef" :model="formPaw" :rules="rules">
          <a-form-item label="原密码" ref="old_pwd" name="old_pwd" style="margin-left: 13px">
            <a-input
              v-model:value="formPaw.old_pwd"
              size="small"
              placeholder="请输入原密码"
              style="width: 360px; height: 30px"
            ></a-input>
          </a-form-item>
          <a-form-item label="新密码" ref="new_pwd" name="new_pwd" style="margin-left: 13px">
            <a-input
              v-model:value="formPaw.new_pwd"
              size="small"
              placeholder="请输入8到20位的字母加数字"
              style="width: 360px; height: 30px"
            ></a-input>
          </a-form-item>
          <a-form-item label="确认密码" ref="confirm_paw" name="confirm_paw">
            <a-input
              v-model:value="formPaw.confirm_paw"
              size="small"
              placeholder="请输入8到20位的字母加数字"
              style="width: 360px; height: 30px"
            ></a-input>
          </a-form-item>
        </a-form>
        <div class="submit-btn">
          <a-button class="cancel-btn" @click="selectClose">取 消</a-button>
          <a-button class="ok-btn" @click="selectTypeOk">保存</a-button>
        </div>
      </div>
    </div>
    <!-- 子账号 -->
    <!-- <ul class="content-list" v-if="showChildAccound">
        <li class="list-li">
          <div class="profile"></div>
          <div class="account">
            <span class="account-txt">账号类型</span>
            <span class="txt">{{ accountChildType }}</span>
          </div>
        </li>
        <li class="list-li">
          <div class="profile"></div>
          <div class="account">
            <span class="account-txt">账号信息</span>
            <div class="account-info">
              <span class="txt">{{ accountChInfo }}</span>
              <a-button type="primary" ghost style="width: 80px; height: 30px" size="small" @click="editChildPaw"
                >修改密码</a-button
              >
            </div>
          </div>
        </li>
        <li class="list-li">
          <div class="profile"></div>
          <div class="account">
            <span class="account-txt">主账号信息</span>
            <span class="txt">{{ accountinfo }}</span>
          </div>
        </li>
        <li class="list-li">
          <div class="profile"></div>
          <div class="account">
            <span class="account-txt">KEY</span>
            <div class="account-info">
              <span class="txt">{{ accountKey }}</span>
              <a-button type="primary" ghost style="width: 80px; height: 30px" size="small" @click="copyInfo"
                >复制</a-button
              >
            </div>
          </div>
        </li>
      </ul> -->
  </div>
</template>
<script setup>
import { message } from 'ant-design-vue'
import { AESUtil } from '@/utils/AESUtil'
// 输入密码信息
const formPaw = ref({
  old_pwd: '',
  new_pwd: '',
  confirm_paw: ''
})
// 子账号信息
const switchAccount = ref([])
// 修改密码确定
const selectTypeOk = async () => {}
// 修改密码取消
const selectClose = () => {}
// 判断输入的密码是否一致
const equalToPassword = (rule, value, callback) => {
  if (formPaw.value.new_pwd !== value) {
    callback(new Error('两次输入的密码不一致'))
  } else {
    callback()
  }
}
// 密码规则校验
const rules = ref({
  old_pwd: [{ required: true, message: '密码不能为空', trigger: 'blur' }],
  new_pwd: [
    { required: true, message: '新密码不能为空', trigger: 'blur' },
    {
      pattern:
        '^(?=.*\\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&*,./:;\\"\'\`~|*--+/\\\\.])[\\da-zA-Z!@#$%^&*,./:;\\"\'\`~|*--+/\\\\.]{8,20}$',
      message: '密码由8-20位至少包含一个大小写字母、数字、特殊符号组成',
      trigger: 'blur'
    }
  ],
  confirm_paw: [
    { required: true, message: '确认密码不能为空', trigger: 'blur' },
    { required: true, validator: equalToPassword, trigger: 'blur' }
  ]
})
onMounted(() => {})
</script>

(2)下载crypto-js插件

使用npm进行安装crypto-js

npm install crypto-js --save

(3)使用crypto-js插件

在下载完之后其实我们的项目里已经存在crypto-js插件了,如果不知道有没有安装成功可以在项目的package.json文件中进行查看。那么如何使用这个组件呢,这个还需要你再在utils文件夹下重新建一个名为AESUtil.js的文件。然后在这个文件里面使用此组件,具体方法如下:

import CryptoJS from 'crypto-js'

// 秘钥,必须由16位字符组成
// const secretKey = 'j78Rd5fEi9fr4$dY'
export const AESUtil = {
  /**
   * AES加密方法
   * @param content 要加密的字符串
   * @returns {string} 加密结果
   */
  aesEncrypt: (content, seckey ) => {
    const key = CryptoJS.enc.Utf8.parse(seckey)
    const srcs = CryptoJS.enc.Utf8.parse(content)
    const encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 })
    return encrypted.toString()
  },

  /**
   * 解密方法
   * @param encryptStr 密文
   * @returns {string} 明文
   */
  aesDecrypt: (encryptStr, seckey) => {
    const key = CryptoJS.enc.Utf8.parse(seckey)
    const decrypt = CryptoJS.AES.decrypt(encryptStr, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 })
    return CryptoJS.enc.Utf8.stringify(decrypt).toString()
  }
}

(4)引用AESUtil.js文件

结束完上述操作后,需要做的是如何在自己写的代码中使用到这个方法,首先是在上述代码中的<script>中引入AESUtil.js文件

import { AESUtil } from '@/utils/AESUtil'

然后再次确认密码的事件中进行使用

// 修改密码确定
const selectTypeOk = async () => {
  try {
    await formRef.value.validateFields()
  } catch (errorInfo) {
    return console.log('请完整输入')
  }
//这里是使用方式---本片文章最重要的地方
  const passwordEntity = {
    old_pwd: AESUtil.aesEncrypt(formPaw.value.old_pwd, 'DZ2Ri1rVRhWEALBx'),
    new_pwd: AESUtil.aesEncrypt(formPaw.value.new_pwd, 'DZ2Ri1rVRhWEALBx'),
    confirm_paw: AESUtil.aesEncrypt(formPaw.value.confirm_paw, 'DZ2Ri1rVRhWEALBx')
  }
  console.log(formPaw.value.old_pwd, 'formPaw.old_pwdformPaw.old_pwdformPaw.old_pwd')
  updAccountPwd(passwordEntity)
    .then(res => {
      if (res.code === 200 && res.data) {
        message.success('修改成功')
      } else {
        message.error('修改失败')
      }
    })
    .catch(error => {
      console.log(error)
    })
}

以上代码中的接口使用的是封装后的方式,可自行按照自己的进行修改即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/746074.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VS2019中解决方案里的所有项目都是 <不同选项> 的解决方案

以上等等&#xff0c;全部是 <不同选项>。。。 这样的话&#xff0c;如何还原和查看原有的值呢&#xff0c;就这么丢失掉了吗&#xff1f; 不会&#xff0c;需要解决方案里配置一下。 解决&#xff1a; 解决方案右键属性 -> 配置属性 -> 配置 -> 将所有配置改…

如何将个人电脑做P2V备份到虚拟化平台

背景&#xff1a;公司员工个人电脑绑定了商用软件的license&#xff0c;现在员工离职&#xff0c;license又需要使用&#xff0c;电脑就一直被占用。 解决方法&#xff1a;利用VMware Vcenter Converter Standalone将此台式电脑上载到公司虚拟化平台上 具体做法&#xff0c;下…

ORBSLAM3_ROS_Ubuntu18_04环境搭建安装

orbslam3安装 ORB-SLAM3配置及安装教程&#xff08;2023.3&#xff09;_orbslam3安装-CSDN博客 换源&#xff0c;换成国内的 搜索software 安装工具 sudo apt install git sudo apt update sudo apt install gcc g cmake安装 cmake安装新版本 ubuntu20.04安装cmake详细…

欧洲杯盛宴与火伞云融合CDN:技术革新与体育盛事的完美融合

随着科技的飞速发展&#xff0c;体育盛事也迎来了前所未有的变革。欧洲杯&#xff0c;作为世界足坛的顶级赛事&#xff0c;吸引了全球数亿球迷的目光。而在这个信息爆炸的时代&#xff0c;如何确保球迷们能够流畅、高清地观看比赛&#xff0c;成为了各大媒体和技术公司面临的重…

基于YOLOv5s的纸板缺陷检测(附数据集与Coovally操作步骤)

本文内容:以纸板缺陷检测为例操作的整个过程&#xff0c;从创建数据集到训练模型再到预测结果每个步骤进行可视化操作与分析。 文末有数据集获取方式&#xff0c;请先看检测效果 现状 物流行业快速发展&#xff0c;对于网购的需求不断增大&#xff0c;随之而来的就是纸板制造…

vue2编写文字由上到下渐变色,文字实时监控变化

文字效果如下: 这里是使用到HTML5的 canvas 编辑文字的方法 主要应用canvas图片背景渐变到文字的原理 这里文字渐变使用到的背景图如下&#xff1a; 1、在vue项目中新建组件 命名 textColor.vue 2、在textColor.vue组件下的代码如下&#xff1a; <template><div>&…

flink输出中文乱码

flink输出中文乱码 &#xff08;1&#xff09;首先在/etc/profile.d/my_env.sh中加入下面这行数据 export LANGzh_CN.UTF-8&#xff08;2&#xff09;其次在flink配置文件中指定编码 [xxxhadoop102 flink-1.13.6]$ vim conf/flink-conf.yaml加入下面这行数据 env.java.opts:…

王春城 | 精益生产推进中如何建立有效的反馈机制?

在精益生产的推进过程中&#xff0c;建立有效的反馈机制是确保持续改进和高效运作的关键。一个健全的反馈机制能够及时发现问题&#xff0c;提供解决方案&#xff0c;并促进团队成员之间的有效沟通。下面将分享在精益生产环境中如何构建并运行一个有效的反馈机制。 一、明确反馈…

CDGA|数据治理新策略:完善分级分类,打破算法偏见枷锁

在数字化时代&#xff0c;数据已成为企业运营和社会发展的核心驱动力。然而&#xff0c;随着数据量的爆炸性增长&#xff0c;数据治理的重要性也日益凸显。其中&#xff0c;数据分级分类和算法偏见等问题成为了当前数据治理面临的关键挑战。 数据分级分类&#xff1a;确保数据的…

【Java面试场景题】如何解决高并发下的库存抢购超卖少买问题?

一、问题解析 我相信很多人都看到过相关资料&#xff0c;但是在实践过程中&#xff0c;仍然会碰到具体的实现无法满足需求的情况&#xff0c;比如说有的实现无法秒杀多个库存&#xff0c;有的实现新增库存操作缓慢&#xff0c;有的实现库存耗尽时会变慢等等。 这是因为对于不…

国内AI行业对GPU算力的需求有多大?

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;算力作为支撑其持续进步的核心动力&#xff0c;在国内的重要性日益凸显&#xff0c;无论是海外还是国内&#xff0c;AI算力行业都呈现出蓬勃发展的态势&#xff0c;而国内对于AI算力的需求更是呈现出爆发式的…

1Panel开源面板项目GitHub Star数量突破20,000!

截至2024年6月25日9:00&#xff0c;FIT2CLOUD飞致云旗下开源项目——1Panel开源Linux服务器运维管理面板GitHub Star数超过20,000个&#xff01; 继Halo和JumpServer之后&#xff0c;1Panel成为飞致云旗下第三个GitHub Star数量超过20,000个的开源项目&#xff0c;也是飞致云旗…

Android studio Logcat 功能介绍

介绍 Android Studio Jellyfish版本下logcat功能&#xff0c;不同的tag会有不同的颜色&#xff0c;不同level等级的log默认也有不同的颜色。log过滤修改的更简洁了&#xff0c;原先的log视图只需要勾选就可以选择不同level的log了&#xff0c;当前需要在输入框中进行过滤器匹配…

OAuth 2.0资源授权机制与安全风险分析

文章目录 前言OAuth2.01.1 OAuth应用1.2 OAuth基础1.3 授权码模式1.4 其它类模式1.5 openid连接 安全风险2.1 隐式授权劫持2.2 CSRF攻击风险2.3 Url重定向漏洞2.4 scope校验缺陷 总结 前言 OAuth 全称为Open Authorization&#xff08;开放授权&#xff09;&#xff0c;OAuth …

odoo 去掉在线聊天的删除和编辑内容

描述 odoo在线聊天功能中,在原有的聊天记录中是可以进行编辑和删除的 这使得产生很多不可控原因,乱改,乱删等 所以要进行屏蔽此功能 优化前 优化后 升级 mail 模块刷新即可。 <Dropdown t-if="messageActions.actions.length gt quickActionCount"onStateCha…

[JS]DOM元素

介绍 DOM(Document Object Model---文档对象模型) 是浏览器提供的一套专门用来操作网页内容的API DOM树 把HTML文档以树状结构直观的表现出来, 称为文档数或者DOM树, DOM树直观的展示了标签与标签的关系 DOM对象 浏览器根据html标签生成的JS对象称为DOM对象 document对象 …

专业,城市,院校,高考填报志愿的三要素怎么排序?

我认为排序方式可以参考&#xff1a; 城市>学校 同样是计算机专业&#xff0c;不论学校的高低&#xff0c;一线城市更容易接触到时代的前端&#xff0c;有更多学习机会&#xff0c;有更好的文化氛围&#xff0c;同样在就业的时候也更容易接触到企业.... 如果要把专业考虑进…

mybatis中动态sql语句like concat(“%“,#{xm},“%“)

1、动态SQL是一种可以根据不同条件生成不同SQL语句的技术&#xff0c;随着用户输入或外部条件变化而变化的SQL语句 2、SQL语句中的like模糊查询 xm like %小米%&#xff0c;但开发中经常用到 xm like concat("%",#{xm},"%")&#xff0c;可以防止sql注入…

半藏酒商业模式解读,半藏酱酒营销案例,半藏总院分院招商模式

半藏酱酒通过新零售模式&#xff0c;实现销售额快速增长。其模式包括私域营销、共享门店和DTC模式 入局酱酒市场短短4个月&#xff0c;销售额便破亿&#xff0c;15个月销售额突破6亿&#xff0c;还成立了700多家分院… 主要步骤是三个身份&#xff1a;分院、联创股东、个人股东…

Java毕设服务工作室

Java毕设服务工作室&#xff1a;专注提供高质量Java代码解决方案 在Java编程领域&#xff0c;毕业设计&#xff08;毕设&#xff09;项目往往需要大量的代码编写和调试。为了让同学们能够更专注于项目的核心逻辑和技术实现&#xff0c;Java毕设服务工作室应运而生&#xff0c;…