【问题标题】:Javascript. Convert MD5 hash into an integerJavascript。将 MD5 哈希转换为整数
【发布时间】:2013-06-20 13:40:06
【问题描述】:

是否可以在 Javascript 中将这样的内容:d131dd02c5e6eec4 693d9a0698aff95c 2fcab58712467eab 4004583eb8fb7f89(MD5 哈希函数的结果)转换为整数?

【问题讨论】:

  • 你想要这个整数做什么?您可以将其转换为字符串,但不能转换为 JavaScript 数字(准确地说,无论如何)。
  • 我正在尝试实现 Chord 协议。
  • 您甚至可以开始将其转换为 int 的唯一方法是使用某种形式的替换将字母替换为数字,这会产生一整套其他问题...
  • @AndreiBogdan:那么,要实现 Chord 协议,需要对哈希(作为整数)进行什么计算?
  • 在描述协议的文章中,它说“一致的哈希函数使用 SHA-1 作为基本哈希函数为每个节点和密钥分配一个 m 位标识符。通过对节点的 IP 进行哈希处理来选择节点的标识符地址 [...]”。所以我可以通过比较字符串来“围绕一个圆圈”排列这些值,但后来它说每个节点都有一个后继列表:“s = successor(n+2^i), where 0

标签: javascript md5


【解决方案1】:

可能并不完美,但这符合我的需要

export function stringToIntHash(str, upperbound, lowerbound) {
  let result = 0;
  for (let i = 0; i < str.length; i++) {
    result = result + str.charCodeAt(i);
  }

  if (!lowerbound) lowerbound = 0;
  if (!upperbound) upperbound = 500;

  return (result % (upperbound - lowerbound)) + lowerbound;
}

【讨论】:

  • 我真的很喜欢这个解决方案,因为它很简单并且(因为它依赖于 ASCII 代码)可以很容易地在服务器上复制,但我缺少的是我想要概率假设输入是一个统一随机选择字符串,保证两个边界之间的分布是均匀的。
【解决方案2】:

这看起来像一个十六进制数,因此您可以尝试使用 parseInt 函数并传入十六进制数:

var num = parseInt(string, 16);

编辑:此方法实际上不起作用。有关详细信息,请参阅 cmets。

【讨论】:

  • 它在我的控制台中返回一个数字......一个巨大的数字,但它是什么。不过,我不确定它最终有多精确。
  • 非常不精确。或者,如果您保留空格,则只保留第一部分。
  • 当我做a = 'd131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f89' b = parseInt(a, 16)9.462148622078087e+76 然后b % 2 返回0b % 3 返回2,所以这不意味着它具有较低的精度数字?还是说谎或做一些奇怪的事情?
  • 这个答案真的应该被接受吗? cmets 似乎表明这不是正确的方法还是我误解了什么?
  • 如果你需要一个随机数,你可以取一个散列的子串(8、12个八位字节)然后parseInt()。
【解决方案3】:

也许这个https://github.com/lovell/farmhash

const farmhash = require('farmhash');
const hexDigest = crypto.createHash('md5').update().digest('hex');
farmhash.fingerprint64(hexDigest);

【讨论】:

    【解决方案4】:

    ES6版本,字符串转0-9之间的整数:

    string.split('').map(i => i.charCodeAt(0)).reduce((a, b) => a + b, 0) % 10
    

    【讨论】:

      猜你喜欢
      • 2010-11-28
      • 2017-11-05
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 2015-11-23
      • 2012-11-11
      相关资源
      最近更新 更多