我有两个问题:
SecretKeySpec
以及何时使用KeyGenerator
进行密钥生成?答案 0 :(得分:0)
取决于您的申请
是。不同的密码可以使用不同的密钥长度。您将AlgorithmParameterSpec传递给密钥生成器。
答案 1 :(得分:0)
KeyGenerator
每次调用时都会创建一个 new 随机密钥。返回的密钥也保证长度与获取KeyGenerator
实例时指定的算法兼容。
SecretKeySpec
包装现有的字节数组。字节源可以是十六进制或Base64字符串,或者实际上是先前生成的密钥的任何其他文本或二进制表示。因此,SecretKeySpec
的用例是当您需要重用先前存储在某些外部表示中的密钥时。
通常SecretKeySpec
的实例可以直接用作密钥,因为SecretKeySpec
实现SecretKey
,大多数使用密钥的加密算法支持所谓的" raw&#34 ;键在哪里" raw" key基本上是一个没有特定内部结构的随机字节序列。
当算法需要特定的SecretKey
表示(通常是算法实现内部的SecretKey
的子类)时,您必须使用SecretKeyFactory
将SecretKeySpec
转换为适当的SecretKey
。
如果加密算法支持" raw"密钥然后唯一的要求是密钥长度符合算法期望。
但加密提供程序的实现者可以决定他需要使用特定的键表示,例如,根据初始" raw"来缓存或预先计算某些值。字节。在这种情况下,除了从SecretKey
和Key.getAlgorithm()
方法返回正确的标识符之外,算法还可以要求传入的Key.getFormat()
实例也是SecretKey
的特定子类,因此使用SecretKeyFactory
将密钥规范转换为密钥是必需的。此类案例通常记录在提供者文档中。