返回 AiToEarn
password.util.ts
根目录 / project / aitoearn-electron / server / src / util / password.util.ts
1 /*
2 * @Author: nevin
3 * @Date: 2022-01-21 09:50:47
4 * @LastEditors: nevin
5 * @LastEditTime: 2024-07-08 15:38:55
6 * @Description: 认证模块-加密工具
7 */
8 import * as crypto from 'crypto';
9 export interface Password {
10 password: string; // 密码
11 salt: string; // 盐
12 }
13
14 /**
15 * 生成随机盐
16 */
17 function makeSalt(): string {
18 return crypto.randomBytes(3).toString('base64');
19 }
20
21 /**
22 * Encrypt password
23 * @param password 密码
24 * @param salt 密码盐
25 * @returns {
26 * password, // 加密的密码
27 * salt
28 * }
29 */
30 export function encryptPassword(password: string, salt?: string): Password {
31 if (!password) return null;
32 salt = salt || makeSalt();
33
34 // 10000 代表迭代次数 16代表长度
35 password = crypto
36 .pbkdf2Sync(password, Buffer.from(salt, 'base64'), 10000, 16, 'sha1')
37 .toString('base64');
38 return {
39 password,
40 salt,
41 };
42 }
43
44 /**
45 * 校验用户信息
46 * @param userPassword 用户密码
47 * @param userSalt 盐值
48 * @param password 密码
49 * @returns
50 */
51 export function validatePassWord(
52 userPassword: string,
53 userSalt: string,
54 password: string,
55 ): boolean {
56 // 通过密码盐,加密传参,再与数据库里的比较,判断是否相等
57 const { password: hashPassword } = encryptPassword(password, userSalt);
58 return userPassword === hashPassword;
59 }
60
60 lines TYPESCRIPT