我正在创建Android应用,该应用将生成安全随机的256位密钥。我还希望用户可以选择通过在屏幕上点击/拖动来生成随机字节,从而为随机数生成器提供种子(类似于TrueCrypt生成其键的方式)。看来SecureRandom是我最好的选择,但是我在理解setSeed(byte[])方法时遇到了麻烦。

这里是文档:

播种此随机对象。给定的种子补充而不是替换现有的种子。因此,保证重复呼叫永远不会降低随机性。

我打算获取用户触摸事件的X和Y坐标并对其进行哈希处理,然后将哈希中的字节重复地馈送到setSeed中。

我的问题是,后续对setSeed的调用会增强现有的“随机性”还是会或多或少地无用?还是有一种更好的方法来实现我完全不了解的目标?

最佳答案

是的,“或多或少没用”。

docs:

“传递给SecureRandom对象的任何种子材料都必须不可预测”,鼠标移动可能不符合该标准。

通常,CPRNG会不断从设备上的事件中添加种子,您将做得更好。

也来自docs:

void setSeed (long seed) 使用给定长种子中包含的八个字节来重新设置此随机对象的种子。给定的种子补充而不是替换现有的种子。因此,保证重复呼叫永远不会降低随机性。

因此,继续前进,您将不会受到伤害,但是如果您有所改进,则值得怀疑。

09-12 03:35