js实现哈希函数
哈希函数的基本概念
哈希函数是一种将任意长度的输入(如字符串、文件等)转换为固定长度输出的函数。输出通常称为哈希值或摘要。哈希函数在密码学、数据检索和唯一标识等领域有广泛应用。
简单哈希函数实现
以下是一个简单的字符串哈希函数实现,使用常见的乘法哈希算法:

function simpleHash(str) {
let hash = 0;
for (let i = 0; i < str.length; i++) {
const char = str.charCodeAt(i);
hash = (hash << 5) - hash + char;
hash |= 0; // 转换为32位整数
}
return hash;
}
更复杂的哈希算法
对于需要更高质量哈希的情况,可以考虑实现djb2算法:
function djb2Hash(str) {
let hash = 5381;
for (let i = 0; i < str.length; i++) {
hash = (hash * 33) ^ str.charCodeAt(i);
}
return hash >>> 0; // 确保为非负数
}
使用现代加密API
现代浏览器提供了Web Crypto API,可以生成更安全的哈希:

async function sha256Hash(message) {
const msgBuffer = new TextEncoder().encode(message);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
哈希函数的特性考虑
实现哈希函数时需要考虑以下特性:
- 一致性:相同输入总是产生相同输出
- 高效性:计算速度要快
- 均匀分布:输出应尽可能均匀分布在值域上
- 抗碰撞性:不同输入产生相同输出的概率要低
实际应用注意事项
在实际应用中:
- 简单哈希函数适用于非安全场景如哈希表
- 加密应用应使用专门的加密哈希函数如SHA系列
- 考虑添加盐值(salt)以防止彩虹表攻击
- 前端哈希不能替代后端安全措施






