react+koa如何进行登录时密码的加密解密和存储到数据库

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: react+koa如何进行登录时密码的加密解密和存储到数据库

一、前端加密


前端安装crypto-js


npm install crypto-js --save


封装加密方法


import CryptoJS from 'crypto-js'  --引入js
import { SECRETKEY } from '../config/secret' --引入加密的密匙
采用AES对称加密方法:
/**
 * 加密函数,加密同一个字符串生成的都不相同
 * @param {*} str 
 */
export function encrypt(str) {
    return CryptoJS.AES.encrypt(JSON.stringify(str), SECRETKEY).toString();
}
/**
 * 解密函数
 * @param {*} str 
 */
export function decrypt(str) {
    const bytes = CryptoJS.AES.decrypt(str, SECRETKEY);
    return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
}


使用,引入刚才创建的这个加密的方法


import { encrypt } from "../../../utils/util";
 onSubmit = () => {
        this.props.form.validateFields((errors, values) => {
            if (!errors) {
                //this.onLogin(values)
                 values.password = encrypt(values.password); --进行加密
                 this.post(`${this.api.login.login}`, values).then((res) => {
                   if (res.data.code == 200) {
                     message.success(res.data.message);
                     sessionStorage.setItem("blogUser", values.username);
                     sessionStorage.setItem("menuItmeKey", "0");
                     const action = updateinfo(res.data.data);
                     store.dispatch(action);
                     sessionStorage.setItem("token",res.data.token);
                   }else{
                    message.warning(res.data.message);
                   }
                 }).catch((res)=>{
                     message.warning(res.data.message);
                 });
            }
        });
    }


二、koa后端进行解密再加密存储到数据库


后端也需要安装crypto-js,方法痛前端一样,


不过koa是基于commonjs的语法,因此使用上不能用es6的语法


let passwd = tool.decrypt(query.password);  --进行解密操作,当然解密的密匙要跟前端一致


1、一般用node写后端的话,这直接写一个中间件即可


安装 npm install cryptp --save


首先我们肯定要封装一个加密的文件,我们命名为password-handle.js


const crypto = require('crypto');
  const md5password = (password) => {
    const md5 = crypto.createHash('md5');
    const result = md5.update(password).digest('hex'); //hex表示拿到最终为十六进制
    return result;
  }
  module.exports = md5password;


2、然后创建我们的中间件,命名为auth_middleware.js


const md5password = require('../utils/password-handle');
  const handlePassword = async (ctx,next) =>{
    let { password }  = ctx.request.body;
    ctx.request.body.password = md5password(password);
    await next();
  }
  module.exports = {
    handlePassword
  }


使用


const UserModule = require('../modules/users')
const md5password = require("../utlis/password-handle");
const jwt = require("jsonwebtoken")
const keys = require("../config/keys")
const tool =  require("../utlis/index");
class UserControler {
  static async adduser(ctx) { //注册
    const query = ctx.request.body;
    let passwd = tool.decrypt(query.password);  --解密操作
    query.password = md5password(passwd);       --重新加密
    try {
      let sqlt = { 
        username: query.username,
      };
      const result = await UserModule.userLogin(sqlt);
      if (result.length > 0) {
        ctx.response.status = 200;
        ctx.body = {
          code: 201,
          message: "该用户已存在,请勿重复注册",
        };
      } else {
        const data = await UserModule.addUsers(query);
        if (data) {
          const payload = {
            userNumber: data.username,
            time: new Date().getTime(),
            timeout: 1000 * 60 * 60 * 2,
          };
          const token = jwt.sign(payload, keys.secretOrkey, {
            expiresIn: 3600,
          });
          ctx.response.status = 200;
          ctx.body = {
            code: 200,
            token: token,
            data: {
              username: data.username,
              user_id: data.user_id,
              roleType: data.roleType,
              token: token,
            },
            message: "登陆成功",
          };
        } else {
          ctx.response.status = 200;
          ctx.body = {
            code: 400,
            message: "注册失败",
          };
        }
      }
    } catch (err) {
      ctx.response.status = 412;
      ctx.body = {
        code: 412,
        msg: "error",
        err,
      };
    }
  }
 }


相关文章
|
2月前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
92 0
|
10天前
|
存储 SQL 专有云
支持配置审计日志的存储数据库
审计日志作为企业监管平台的重要依据,同时也是“等保三级”认证的必要考察项之一。Dataphin V4.3版本支持设置平台日志的存储数据源,帮助用户快速获取审计日志,同时介绍了不同部署模式的Dataphin如何查看审计日志的方法。
|
25天前
|
存储 NoSQL 关系型数据库
可以存储文件的数据库有哪些?
可以存储文件的数据库有哪些?
22 6
|
2月前
|
存储 缓存 负载均衡
带你认识DM 共享存储数据库集群
带你认识DM 共享存储数据库集群
46 3
|
21天前
|
存储 NoSQL 关系型数据库
可以存储文件的数据库有哪些?
可以存储文件的数据库有哪些?
144 0
|
2月前
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
56 0
|
2月前
|
存储 小程序 关系型数据库
原生小程序 获取手机号并进行存储到mysql数据库
原生小程序 获取手机号并进行存储到mysql数据库
|
4天前
|
SQL 安全 算法
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【9月更文挑战第29天】随着互联网的普及,网络安全问题日益严重。本文将介绍网络安全漏洞、加密技术以及安全意识等方面的内容,帮助读者了解网络安全的重要性,提高自身的网络安全意识。
|
1天前
|
存储 安全 网络安全
揭秘网络安全的盾牌与剑:漏洞防御与加密技术
【9月更文挑战第31天】在数字时代的浪潮中,网络安全和信息安全成为了保护个人隐私和企业资产的重要屏障。本文将通过浅显易懂的语言和生动的比喻,带你深入了解网络安全漏洞、加密技术的奥秘,以及如何培养安全意识。我们将一起探索网络安全的“盾牌”和“剑”,了解它们如何守护我们的数字世界。
105 61
|
2天前
|
SQL 安全 程序员
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【9月更文挑战第30天】在数字化时代,网络安全和信息安全已成为全球关注的焦点。本文将探讨网络安全漏洞、加密技术以及提升安全意识的重要性。我们将通过代码示例,深入理解网络安全的基础知识,包括常见的网络攻击手段、防御策略和加密技术的实际应用。同时,我们还将讨论如何提高个人和企业的安全意识,以应对日益复杂的网络安全威胁。
下一篇
无影云桌面