Java 对称密钥生成
我有两个问题:Java 对称密钥生成,java,jce,Java,Jce,我有两个问题: 何时使用SecretKeySpec以及何时使用KeyGenerator生成密钥 密钥实例和密码实例是否必须遵循相同的算法?背后的概念是什么 取决于你的申请 对。不同的密码可以使用不同的密钥长度。将AlgorithmParameterSpec传递给密钥生成器 KeyGenerator每次调用时都会创建一个新的随机密钥。还保证返回的密钥的长度与获取KeyGenerator实例时指定的算法兼容 SecretKeySpec包装现有字节数组。字节源可以是十六进制或Base64字符串,也可以
SecretKeySpec
以及何时使用KeyGenerator
生成密钥KeyGenerator
每次调用时都会创建一个新的随机密钥。还保证返回的密钥的长度与获取KeyGenerator
实例时指定的算法兼容
SecretKeySpec
包装现有字节数组。字节源可以是十六进制或Base64字符串,也可以是以前生成的密钥的任何其他文本或二进制表示形式。因此,SecretKeySpec
的用例是当您需要重用以前存储在某些外部表示中的密钥时
通常,SecretKeySpec
的实例可以直接用作密钥,因为SecretKeySpec
实现了SecretKey
,并且大多数使用密钥的加密算法都支持所谓的“原始”密钥,“原始”密钥基本上是没有特定内部结构的随机字节序列
当算法需要特定的SecretKey
表示(通常是算法实现内部的SecretKey
子类)时,您必须使用SecretKey工厂
将SecretKey规范
转换为适当的SecretKey
如果加密算法支持“原始”密钥,那么唯一的要求是密钥长度与算法期望相匹配
但是加密提供者的实现者可以决定他需要使用特定的密钥表示,例如,基于初始“原始”字节缓存或预计算一些值。在这种情况下,除了从
Key.getAlgorithm()
和Key.getFormat()
返回正确的标识符外,算法还需要传入SecretKey
实例,因此,必须使用SecretKeyFactory
将密钥规范转换为密钥。此类案例通常记录在提供商文档中。谢谢斯塔克,但问题1的标准是什么。