从Android

时间:2016-08-12 13:14:17

标签: java android random

我正在创建能够生成安全随机256位密钥的Android应用。我还希望用户可以选择在屏幕上点击/拖动生成随机字节,这将随机数生成器播种(类似于TrueCrypt生成其键的方式)。看起来SecureRandom是我最好的选择,但我无法理解setSeed(byte[])方法。

以下是文档:

  

重新种植此随机对象。给定的种子补充而不是替代现有的种子。因此,保证重复呼叫永远不会减少随机性。

我计划获取用户触摸事件的X和Y坐标并对其进行散列,然后将哈希中的字节反复输入setSeed

我的问题是,随后对setSeed的调用会加强现有的"随机性"或者它会或多或少无用?或者有没有更好的方法来实现这一点,我完全失踪了?

1 个答案:

答案 0 :(得分:1)

是的,"或多或少无用"。

来自docs

  

"传递给SecureRandom对象的任何种子材料必须是不可预测的#34;鼠标移动可能不符合该标准。

一般情况下,CPRNG会不断添加设备上的事件种子,你不会做得更好。

同样来自docs

  

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

所以,继续,你不会有任何伤害,但你是否会改善任何事情都是值得怀疑的。