Java 的 KeyGenerator 默认是随机安全的吗?
Is Java's KeyGenerator random secure by default?
以下行通过 jdk 的 KeyGenerator
.
生成 sha512 机密
SecretKey secretKey = KeyGenerator.getInstance("HmacSHA512").generateKey();
我想知道随机密钥是否安全?
或者,我应该在生成密钥之前使用 SecureRandom
实例显式初始化生成器吗?
为了完整起见,您可以使用 512 位的密钥大小调用 init
方法。但是,HMAC 的默认密钥大小与输出的大小相同。所以从这个意义上说,假设这个密钥大小是默认设置的是非常合理的。实际上,应避免使用常量值调用 init
方法。
至于实现,如果您不显式调用 init
方法,则很可能会假定默认值并选择 SecureRandom
实例。但是,从某种意义上说,这是一个逻辑提供程序默认值,您是正确的;它应该 已被指定为对所有提供商的要求。
这里发生的事情的一些想法在 KeyGeneratorCore
中。所有的提供程序代码都在线,所以找不到它是因为看得不够深入,尽管你需要一些 Google foo 才能找到它。
以下行通过 jdk 的 KeyGenerator
.
SecretKey secretKey = KeyGenerator.getInstance("HmacSHA512").generateKey();
我想知道随机密钥是否安全?
或者,我应该在生成密钥之前使用 SecureRandom
实例显式初始化生成器吗?
为了完整起见,您可以使用 512 位的密钥大小调用 init
方法。但是,HMAC 的默认密钥大小与输出的大小相同。所以从这个意义上说,假设这个密钥大小是默认设置的是非常合理的。实际上,应避免使用常量值调用 init
方法。
至于实现,如果您不显式调用 init
方法,则很可能会假定默认值并选择 SecureRandom
实例。但是,从某种意义上说,这是一个逻辑提供程序默认值,您是正确的;它应该 已被指定为对所有提供商的要求。
这里发生的事情的一些想法在 KeyGeneratorCore
中。所有的提供程序代码都在线,所以找不到它是因为看得不够深入,尽管你需要一些 Google foo 才能找到它。