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

我应该播种SecureRandom吗?

唐伟
2023-03-14
问题内容

在我们的代码库中找到以下代码:

public static final int DEFAULT_LENGTH = 16;
private static SecureRandom SR;
static
{
   try
   {
      SecureRandom sd0 = new SecureRandom();
      SR = new SecureRandom(sd0.generateSeed(DEFAULT_LENGTH * 2));
   }
   catch (Exception e){}
}

在这里,将SecureRandom创建一个默认值,然后使用该默认值为另一个种子创建种子,该种子将在本课程的稍后版本中使用。这真的有必要吗?因为这样做了,第二个比第一个好吗?

当第二秒生成种子时,给出了字节数,这重要吗?难道一个SecureRandom比另一个不同数量的字节播种可能是好还是坏?用于播种的字节数是否应该与将用于的字节数相对应?

如果未调用setSeed,则对nextBytes的第一次调用将强制SecureRandom对象播种自身。如果先前调用过setSeed,则不会发生这种自我播种。-
的javadoc

自我播种还不够好吗?它是否取决于它的用途?

注意: 在某些情况下,它用于为存储在数据库中的内容创建随机ID的类中。


问题答案:

我认为这完全没有必要,因为正如您引用的Javadoc所明确指出的那样:默认构造的SecureRandom实例会自己播种。写这个的人可能不知道。

它们也可能通过强制固定种子长度(实际上对于RNG实施可能不理想)来降低安全性。

最后,假设代码段未更改发布,则静默异常吞咽也不是很好的编码风格。



 类似资料:
  • 问题内容: 我需要将加密的数据从客户端发送到服务器。现在,我正在学习如何使用(要求)加密数据。按照这个公认的答案使用AES进行android加密/解密,我正在执行以下操作: 由于该算法使用,我不确定如果没有,是否可以在甚至其他程序中对此进行解码。 这种加密/解密是否仅在知道的值的情况下工作,或者由于我正在使用,我仍然需要传递其他内容才能解密? 另外,还有更好的方法吗?或者这还好吗? 问题答案: 不

  • 问题内容: 这段代码安全吗? 这是确定安全随机种子的正确方法吗? 问题答案: 不,您应该避免使用构造函数。它既不安全又不可携带。 它是不可移植的,因为它在Windows和其他操作系统上的行为有所不同。 在大多数操作系统上,默认算法是“ NativePRNG”,该算法从操作系统(通常是)获取随机数据,而忽略您提供的种子。 在Windows上,默认算法为“ SHA1PRNG”,该算法将您的种子与计数器

  • 问题内容: 我正在尝试决定要选择哪种mime类型来返回mp3数据(由php提供) 根据此mime类型列表:http : //www.webmaster-toolkit.com/mime-types.shtml 这些之间有什么区别,我应该使用哪个? 问题答案: 最好的选择是使用RFC定义的 mime-type 。

  • 我有点困惑与谷歌标签管理器和gtag.js.我已经读了很多关于它,但它不是100%清楚我用什么在我的情况下。 历史上,我们一直在AngularJS webapp中使用gtag.js。我们还使用图书馆的角度来跟踪谷歌广告转换的购买提供动态价格和线索直接从我们的网站。 我们已经迁移到GTM,从GTM接口提供第三方库。这意味着我们已经评论/删除了gtag。js。现在,我们从GTM跟踪页面分析。然而,很明

  • 这些方法有什么区别吗?特别是最后一种方法是什么?一个比另一个好用吗?

  • 问题内容: 我已经看到以下内容: AngularJS文档也提到了这一点,我不太了解。 这些方法之间有什么区别吗?特别是Angular文档的最后一种方法是做什么的?一个比另一个更好用吗? 问题答案: 它们大致相同,但有一些区别: 如果您 在页面末尾 (而不是在标题中)加载 了 脚本,这将起作用。 否则,在引导应用程序时将不会加载DOM(不会编译任何模板,指令不会有任何效果)。 此作品:plnkr 这