当前位置: 首页 > 面试题库 >

SecureRandom:是否需要一次或每次初始化?

伍耀
2023-03-14
问题内容

我们的团队正在使用SecureRandom生成密钥对列表(将SecureRandom传递给KeyPairGenerator)。对于以下两种选择中的哪一种,我们无法达成共识:

  1. 每次需要生成密钥对时都创建一个新实例

  2. 初始化静态实例并将其用于所有密钥对

通常哪种方法更好, 为什么

添加:我的直觉是第二种选择更安全。但我唯一的论点是基于以下假设的理论攻击:假随机性是从当前时间戳派生的:某人可能会看到密钥对的创建时间,猜测周围时间间隔中的时间戳,计算可能的伪随机序列,并获得关键材料。

添加:我对基于时间戳的确定性的假设是错误的。那就是Random和SecureRandom之间的区别。因此,答案似乎是:就安全性而言,这并不重要。


问题答案:

java.util.Random类不同,java.security.SecureRandom该类必须在每次调用时产生不确定的输出。

这意味着,对于java.util.Random,如果您每次需要一个新的随机数时都使用相同的种子重新创建一个实例,则基本上每次都将获得 相同的
结果。但是,SecureRandom保证不会这样做-因此,每次创建一个实例或创建一个新实例都 不会 影响它生成的随机字节的随机性。

那么,从正常的良好编码实践角度来看,为什么要创建太多实例呢?



 类似资料:
  • 我需要生成加密安全、随机和唯一的字符串,每个字符串实际上都将用作访问令牌。为此,我计划使用Java的类。但是,我不确定SecureRandom是否保证唯一性。换句话说,SecureRandom在生成的每一次都会产生不同的值吗? 用值(即)创建实例似乎可以工作。但是,我不确定。此外,这个答案指出种子既不安全也不可移植。种子值符合我的目的吗? 如果你有其他建议,我也想听听。

  • 我正在执行多个ajax调用,我想在显示表单之前完成所有这些调用。如果有错误,我想停止处理,只显示遇到的第一个错误。我谷歌了很多文章,包括StackOverflow上的文章,这些文章展示了如何链接当时的语句。但是似乎我必须给每个语句都附加一个捕获,否则只捕获最后一个语句中的错误。在本例中,Lookup是一个返回promise的异步调用,ShowError处理错误: 假设至少有一个错误,是否有任何方法

  • 我在第一页“login.php”中有这个 日志php: 如果我测试第一个页面“login.php”,我会得到: 警告:require_once(1):无法打开流:C:\xampp\htdocs\admin\login中没有此类文件或目录。php第6行 致命错误:require_once():无法在C:\xampp\htdocs\admin\login中打开所需的“1”(include_path=”

  • 我有一个关于android camerax架构的问题。我使用的是预览视图,效果非常好。问题与片段之间的事务有关。片段1具有previewView。当我切换到fragment2并返回fragment1时,我会再次绑定previewview,使它首先出现黑屏,然后预览显示在屏幕上。我不想看到黑屏。这个问题有什么解决办法吗?

  • 我正在使用mockito作为junit。在创建对象的模拟时,我有疑问。我有一个名为DBConnect的类。我需要数据库属性,如dbname、凭据等。PatientDetails使用这个类。现在,当我为PatientDetails编写junit时。所以我使用以下代码。 用这个我不能得到正确的结果。

  • 我将firebase添加到我的android项目中,以使用firebase云消息传递。我按照文档进行了操作,但没有找到调用的任何说明。 我的应用程序工作很好,除了有一次它崩溃了以下错误。 当我搜索错误时,给出的解决方案是在启动时调用。 我想知道这是否真的有必要,因为文档没有提到它,我的应用程序在没有它的情况下工作(大部分)很好。 有人知道调用是否真的有必要,还有什么可能导致我上面提到的错误吗? 下