回答
散列任意长度的种子(而不是使用XOR作为paxdiablo建议的)将确保碰撞是极不可能的,即等于散列冲突的概率,与诸如SHA1/2之类的事物相比,这实际上是不可能的。
然后,你可以使用你的散列种子作为一个像样的PRNG的输入,例如我最喜欢的Mersenne Twister。
UPDATE可以在这里
梅森倍捻机实施似乎已经接受任意长度密钥:http://code.msdn.microsoft.com/MersenneTwister/Release/ProjectReleases.aspx?ReleaseId=529
更新2
有关的SHA2碰撞是多么的不可能是一个分析看看有人会不得不努力找到一个,引用http://en.wikipedia.org/wiki/SHA_hash_functions#SHA-2:
对于SHA-2,有两次会面中原像图像攻击,并减少了回合次数。第一次在64轮中攻击41轮SHA-256,时间复杂度为2^253.5,空间复杂度为2^16,80轮中有46轮SHA-512,时间为2^511.5,空间2^3 。第二次攻击的时间复杂度为2^251.7,空间复杂度为2^12的42轮SHA-256,以及时间2^502和空间2^22的42轮SHA-512。
为什么不只是将你的任意序列异或为一个正确长度的类型(如果需要,可以用它的一部分填充它)?例如,如果你想要的种子“paxdiablo”和你的PRNG有四字节的种子:
paxd 0x70617864
iabl 0x6961626c
opax 0x6f706178
----------
0x76707b70 or 0x707b7076 (Intel-endian).
我知道,种子看起来人工的(而且是因为关键是从字母字符选择)。如果你真的想让它不同的地方这句话很可能来自于类似的范围,具有微分再次异或像0xdeadbeef
或0xa55a1248
:
paxd 0x70617864 0x70617864
iabl 0x6961626c 0x6961626c
opax 0x6f706178 0x6f706178
0xdeadbeef 0xa55a1248
---------- ----------
0xa8ddc59f 0xd32a6938
我更喜欢第二个,因为它会更容易移动相似字节分成不同的范围(差分器中字节的高位不同)。
谢谢,我想到了这一点。然而,这有效地用作散列函数。所以,当我的意见更加多样化时,我会将其缩小到更小的窗口并增加碰撞的可能性。我想避免这种情况。 我见过PRNG的实现与一个较小的种子生成的支持表一起使用。但我应该可以用任何字节数组作为输入来生成这个相同的表。更大的投入,更少的碰撞机会,对吧? 这就是我想要的。 – 2010-02-01 09:20:49
- 1. 你如何用两颗种子播种PRNG?
- 2. MIPS可以字节寻址
- 3. 寻找字节码
- 4. 寻找数字
- 5. 字节/字寻址
- 6. 如何用你自己的字节创建字节数组?
- 7. 你可以用数字开头吗?
- 8. random.nextBytes(字节)如何生成字节之后,我们有种子
- 9. 你可以从Silverlight 4.0的字节数组中加载XAP
- 10. PRNG种子通过关键在java
- 11. 提取PRNG的初始种子值?
- 12. 寻找数字的力量
- 13. 寻找m最大数字
- 14. 寻找快乐数字
- 15. addTarget:action:forControlEvents:你可以传递一个字典或任何东西
- 16. 寻找带有字母的数字
- 17. 有没有一种数学/加密算法/模型可以让你缩短/压缩任何数字?
- 18. 可能在Objective-C中保存种子PRNG吗?
- 19. 从10位数字的种子生成9字节的alphunumeric
- 20. 哪种算法可以找到数字范围内的空数字范围?
- 21. 使用NDepend寻找神奇的数字
- 22. 你可以用==比较字符吗?
- 23. 我可以用任何字节数组(Scala)构造一个BigInt吗?
- 24. 读取可变数字的子节点?
- 25. 寻找从字典
- 26. 你可以从一种形式张贴字段在Drupal
- 27. 在Java中,你可以使用子字符串吗?
- 28. Bitshift乘以任何数字
- 29. 你可以在python中压缩字节并发送它们吗?
- 30. 你可以UTF8Encode一个System :: String ^为一个字节*吗?
有时你会很幸运。我一直在考虑Mersenne Twister。虽然不确定实施情况。谢谢!代码需要一些修改,从现有的Random类继承是愚蠢的,除此之外,看起来不错! – 2010-02-01 22:32:17
SHA256给出2^256个不同的可能哈希。为了让你知道这个数字有多大,已知宇宙中有大约2^265个原子。 – 2010-06-25 21:40:40
你可以更新链接到MSDN吗?看起来这个页面已经不在那里了...... – beppe9000 2015-06-14 00:33:28