45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
/**
|
|
* 密码哈希工具
|
|
* 使用 SHA-256 算法对密码进行哈希处理
|
|
*/
|
|
|
|
/**
|
|
* 使用 SHA-256 对字符串进行哈希处理
|
|
* @param text 要哈希的文本
|
|
* @returns 哈希后的十六进制字符串
|
|
*/
|
|
export async function sha256(text: string): Promise<string> {
|
|
const encoder = new TextEncoder();
|
|
const data = encoder.encode(text);
|
|
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
const hashHex = hashArray
|
|
.map((b) => b.toString(16).padStart(2, "0"))
|
|
.join("");
|
|
return hashHex;
|
|
}
|
|
|
|
/**
|
|
* 哈希密码
|
|
* @param password 原始密码
|
|
* @returns 哈希后的密码
|
|
*/
|
|
export async function hashPassword(password: string): Promise<string> {
|
|
// 添加前缀盐值增加安全性
|
|
const saltedPassword = `share_${password}_chat`;
|
|
return sha256(saltedPassword);
|
|
}
|
|
|
|
/**
|
|
* 验证密码
|
|
* @param password 用户输入的密码
|
|
* @param storedHash 存储的哈希值
|
|
* @returns 是否匹配
|
|
*/
|
|
export async function verifyPassword(
|
|
password: string,
|
|
storedHash: string
|
|
): Promise<boolean> {
|
|
const hash = await hashPassword(password);
|
|
return hash === storedHash;
|
|
} |