You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于字符串和种子生成64位数字格式的非加密哈希?

解决方案

要生成64位纯数字格式的非加密(或加密)哈希,你需要解决两个核心问题:处理哈希输出的格式转换,以及避免JavaScript中数字精度丢失的问题,具体实现如下:

方法一:基于CryptoJS.HmacSHA512生成64位数字哈希

CryptoJS.HmacSHA512返回的是WordArray类型,需要先转换为十六进制字符串,再截取对应64位二进制的片段,最后用BigInt转换为纯数字字符串(避免精度丢失):

const seed = 123456;
const name = "你的目标字符串";

// 生成HMAC-SHA512哈希的WordArray对象
const hashWordArray = CryptoJS.HmacSHA512(name, seed.toString());
// 转换为十六进制字符串
const hexFullHash = hashWordArray.toString(CryptoJS.enc.Hex);
// 截取前16位十六进制字符(对应64位二进制哈希)
const hex64Bit = hexFullHash.substring(0, 16);
// 用BigInt将十六进制转为64位整数
const bigIntHash = BigInt(`0x${hex64Bit}`);
// 转换为纯数字字符串
const numericHash = bigIntHash.toString();

console.log(numericHash); // 输出类似"1234567890123456789"的64位数字字符串

方法二:用64位版本的MurmurHash生成非加密哈希

如果不需要加密级别的安全性,推荐直接使用64位版本的MurmurHash,性能更优且原生支持64位输出:

// 需先安装murmurhash3js库:npm install murmurhash3js
const murmurhash = require('murmurhash3js');

const seed = 123456;
const name = "你的目标字符串";

// 生成128位MurmurHash3哈希,取前64位组合成BigInt
const [high32, low32] = murmurhash.x64.hash128(name, seed);
const bigIntHash = (BigInt(high32) << 32n) | BigInt(low32);
const numericHash = bigIntHash.toString();

console.log(numericHash);

关键注意事项

  • 必须用BigInt:64位无符号整数的最大值为18446744073709551615,远超JavaScript Number类型的安全范围(9007199254740991),使用BigInt才能避免精度丢失。
  • 若需要固定长度的数字字符串,可以在转换后补前导零(例如使用numericHash.padStart(19, '0')确保19位长度)。

内容的提问来源于stack exchange,提问作者Naomi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:07:31