【发布时间】: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