【问题标题】:PRNG-like seeded hash function类似 PRNG 的种子散列函数
【发布时间】:2014-09-16 11:12:10
【问题描述】:

我希望两个使用相同“种子”的客户端通过输入时间戳或长数字来生成相同的数字,并返回一个浮点数,如使用 random()。

例如带有函数:hasher(String seed, long input);

 hasher("StackOverflow", 1000000010); //returns 0.57217329503213..
 hasher("StackOverflow", 1000000010); //returns 0.57217329503213...
 hasher("StackOverflowz", 1000000010); //returns 0.15689784654554...
 hasher("StackOverflow", 97494849465); //returns 0.456944151561...

它确实不应该是安全的或私密的,而只是足够随机的。我想我可以使用位操作,但我绝不是散列或位操作方面的专家。

我意识到种子作为种子和输入的组合几乎是多余的,但我想知道在不影响可靠性的情况下在其中实现种子的最佳方法会有所帮助。 有什么想法吗?

谢谢。

【问题讨论】:

  • 一种非常愚蠢的方法是使用input 作为 MD5 算法的盐,并将 MD5 哈希的任何部分解释为从 1 开始的数字的尾数。
  • Vesper 的 +1 - 可以。如果您将问题分解,您可以通过将任何哈希函数“h”用于一个字符串,其中它可能返回的最大值是 M(例如,对于一个可能是 2^32-1 32 位哈希):然后简单地h(seed + input.toString()) / parseFloat(M)

标签: javascript actionscript-3 random hash cryptography


【解决方案1】:

我做了一个小实现,但要注意 JavaScript 远非我的主要语言。该代码需要 CryptoJS 来实现散列功能。

function hasher(a, b) {
    hash = fromHex(CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(a + b)));    
    // warning: only about 32 bit precision
    hashAsDouble = intFromBytes(hash.slice(0, 4)) * (1.0 / 4294967296.0);
    return hashAsDouble;
}

function fromHex(hex) {
    a = [];
    for (var i = 0; i < hex.length; i += 2) {
        a.push("0x" + hex.substr(i, 2));
    }
    return a;
}

function intFromBytes(x) {
    if (x.length != 4) {
        return null;
    }

    var val = 0;
    for (var i = 0; i < x.length; i++) {
        val = val << 8;
        val = val + (x[i] & 0xFF);
    }
    return toUint32(val);
}

function modulo(a, b) {
    return a - Math.floor(a / b) * b;
}

function toUint32(x) {
    return modulo(toInteger(x), Math.pow(2, 32));
}

function toInteger(x) {
    x = Number(x);
    return x < 0 ? Math.ceil(x) : Math.floor(x);
}

【讨论】:

  • 创建这个答案的 JS 类型系统遇到了很多麻烦。如果您想使用这个答案(或一般的 Java 脚本)来创建任何安全的东西,请注意类型系统中的问题(在花费太多时间获取 JS 之后,此评论之前稍微更加固执己见做我想做的事)。
猜你喜欢
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
相关资源
最近更新 更多