ai-chat-ui/src/utils/crypto.ts

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;
}