【Nest教程】Nest项目用户密码加密

举报
青年码农 发表于 2022/08/25 23:45:06 2022/08/25
【摘要】 正常情况下,当用户使用我们的这个服务时,需要注册,设置用户名及密码,由于密码属于比较隐私的,所以在大部分情况下,都需要对用户的密码进行加密。 其实,加密也比较简单,为什么单独分出来写一篇,因为下面我们需要讲项目集成JWT,篇幅较长,所以把这个功能单独拎出来。 1 编写加密工具函数 项目规范化,我们在项目s...

正常情况下,当用户使用我们的这个服务时,需要注册,设置用户名及密码,由于密码属于比较隐私的,所以在大部分情况下,都需要对用户的密码进行加密

其实,加密也比较简单,为什么单独分出来写一篇,因为下面我们需要讲项目集成JWT,篇幅较长,所以把这个功能单独拎出来。

1 编写加密工具函数

项目规范化,我们在项目src目录下新建utils文件夹,这里面放工具函数,新建cryptogram.ts 文件,内容如下:


   
  1. import * as crypto from 'crypto';
  2. /**
  3.  * Make salt
  4.  */
  5. export function makeSalt(): string {
  6.   return crypto.randomBytes(3).toString('base64');
  7. }
  8. /**
  9.  * Encrypt password
  10.  * @param password 密码
  11.  * @param salt 密码验证
  12.  */
  13. export function encryptPassword(password: string, salt: string): string {
  14.   if (!password || !salt) {
  15.     return '';
  16.   }
  17.   const tempSalt = Buffer.from(salt, 'base64');
  18.   return (
  19.     // 10000 代表迭代次数 16代表长度
  20.     crypto.pbkdf2Sync(password, tempSalt, 1000016'sha1').toString('base64')
  21.   );
  22. }

文件内容比较简单,两个方法,一个是随机字符串,一个是加密

2 使用

在user.service.ts文件导入


   
  1. // 引入加密函数
  2. import { makeSalt, encryptPassword } from '../utils/cryptogram';

使用,用在更新及添加方法中,


   
  1. // 增加/更新
  2. async save(parameter: any): Promise<boolean | string> {
  3.   Logger.log(`请求参数:${JSON.stringify(parameter)}`);
  4.   // 判断新增/更新
  5.   const user = await this.UserRepository.findOne({
  6.     where: {
  7.       name: parameter.name,
  8.     },
  9.   });
  10.   if (!parameter.id && user != undefined) {
  11.     return '用户名重复';
  12.   }
  13.   const salt = makeSalt();
  14.   const hashPwd = encryptPassword(parameter.password, salt);
  15.   parameter.password = hashPwd;
  16.   parameter.passwdSalt = salt;
  17.   try {
  18.     let a = await this.UserRepository.save(parameter);
  19.     return true;
  20.   } catch (error) {
  21.     Logger.log(`请求失败:${JSON.stringify(error)}`);
  22.     return false;
  23.   }
  24. }

逻辑很简单,就是不管是添加还是修改,只要是用户传了密码,就把密码加密存进数据库

3 查看效果

72a2d7bf3e9c6e21803bc69c9ad73d15.png

文章来源: blog.csdn.net,作者:NMGWAP,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/NMGWAP/article/details/125067045

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。