eggjs + crypto-js 的 DES 加密实现重置密码接口?

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: eggjs + crypto-js 的 DES 加密实现重置密码接口?

实现过程


1.安装 crypto-js

npm install crypto-js -S


980e8bdccd054a4b964681334d9d62a1.png


2.路由层 router.js 添加路径

// 重置用户密码
router.post('/api/user/resetPassword', verify_token, controller.user.resetPassword);



3.控制层 user.js 添加方法

'use strict';
const Controller = require('egg').Controller;
const CryptoJS = require("crypto-js");
function DES_decrypt(decryptStr) {
  return CryptoJS.DES.decrypt(
    {
      ciphertext: CryptoJS.enc.Hex.parse(decryptStr)
    },
    CryptoJS.enc.Utf8.parse("ABF"),// keyHex
    { 
      mode: CryptoJS.mode.ECB, 
      padding: CryptoJS.pad.Pkcs7
    } // option
  ).toString(CryptoJS.enc.Utf8);
}
class UserController extends Controller {
  // 重置密码
  async resetPassword() {
    const { ctx, app } = this;
    try {
      // 0、获取用户输入的 oldPassword newPassword
      const { oldPassword, newPassword } = ctx.request.body;
      const old_password = DES_decrypt(oldPassword);
      const new_password = DES_decrypt(newPassword);
      console.log('解密--old-->', oldPassword, old_password)
      console.log('解密--new-->', newPassword, new_password)
      // 1、获取请求头 authorization 属性,值为 token
      const token = ctx.request.header.authorization;
      // 2、用 app.jwt.verify(token, app.config.jwt.secret),解析出 token 的值
      const decode = await app.jwt.verify(token, app.config.jwt.secret);
      // 3、校验是否 token 可以,需要在鉴权中间件里加返回
      if(!decode) return;
      // 4、根据用户名,在数据库查找相对应的id操作
      const userInfo = await ctx.service.user.getUserByName(decode.username);
      // 5、校验是否通过
      if (old_password !== userInfo.password) {
        ctx.body = {
          status: 400,
          desc: '原密码错误',
          data: null
        };
        return;
      }
      // 6、通过 service 方法 resetPassword 修改 password 信息
      const result = await ctx.service.user.resetPassword({
        ...userInfo,
        password: new_password
      });
      // 返回 token
      ctx.body = {
        status: 200,
        desc: '更新成功',
        data: null
      };
    } catch (error) {
      ctx.body = {
        status: 500,
        desc: '更新失败',
        data: null
      }
    }
  }
}
module.exports = UserController;


4.服务层 user.js 添加方法

// 重置密码
async resetPassword(params) {
  const { app } = this;
  try {
    // 通过 app.mysql.update 方法更新 user 表, 通过 id 筛选用户
    const result = await app.mysql.update('user', 
      { ...params }, 
      { id: params.id }
    );
    return result;
  } catch(error) {
    console.log(error);
    return null;
  }
}


5.测试接口

我们在apifox上面新增接口,然后进行测试

51e380d2223d4a259cda9f820496c655.png



首先我们先登录拿到token,然后用 kaimo313 这个账号,密码是 123456。修改为 123.


先拿到 DES 加密字符串

'123': newPassword: "a50d7e4459c234f1" 
'123456': oldPassword: "d18bb870a7d5664f"



3c2eb111d58f4e65b65ac34c817576bd.png















目录
相关文章
|
2月前
|
存储 安全 数据安全/隐私保护
浅谈对称加密(AES与DES)
浅谈对称加密(AES与DES)
|
11天前
|
资源调度 前端开发 JavaScript
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第10天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤,包括安装依赖、创建混淆脚本、修改 `package.json` 脚本命令、构建项目并执行混淆,以及在 HTML 文件中引用混淆后的文件。通过这些步骤,可以有效提高代码的安全性。
|
30天前
|
存储 安全 Java
|
30天前
|
存储 算法 安全
SpringBoot 接口加密解密实现
【10月更文挑战第18天】
|
13天前
|
前端开发 JavaScript 安全
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第7天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤。包括项目准备、安装 `javascript-obfuscator`、配置 Vite 构建以应用混淆,以及最终构建项目进行混淆。通过这些步骤,可以有效提升前端代码的安全性,防止被他人轻易分析和盗用。
|
1月前
|
JSON 前端开发 API
使用微信JS-SDK调用发票接口的完整开发指南
本文介绍了如何使用微信JS-SDK的`chooseInvoiceTitle`接口来调用微信的发票功能。通过微信发票接口,用户可以选择开具个人或单位发票,并获取相关发票信息,如抬头、税号、公司地址等。在文中,详细描述了JS-SDK的初始化、发票接口的调用方式,并提供了完整的代码示例。文章还介绍了如何处理返回的发票信息,帮助开发者快速集成微信发票功能。
79 2
|
2月前
|
JavaScript 前端开发 安全
js逆向实战之烯牛数据请求参数加密和返回数据解密
【9月更文挑战第20天】在JavaScript逆向工程中,处理烯牛数据的请求参数加密和返回数据解密颇具挑战。本文详细分析了这一过程,包括网络请求监测、代码分析、加密算法推测及解密逻辑研究,并提供了实战步骤,如确定加密入口点、逆向分析算法及模拟加密解密过程。此外,还强调了法律合规性和安全性的重要性,帮助读者合法且安全地进行逆向工程。
92 11
|
2月前
|
前端开发 数据安全/隐私保护
JS-RSA超长加密
JS-RSA超长加密
52 4
|
3月前
|
JavaScript 数据安全/隐私保护 Python
网易云音乐搜索接口JS逆向: Params、encSecKey加密和AES实战
网易云音乐搜索接口JS逆向: Params、encSecKey加密和AES实战
189 4
|
3月前
|
算法 JavaScript 前端开发
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
287 1
下一篇
无影云桌面