java 密码的默认 AES 长度
Default AES length for java crypto cipher
我想查询 javax.crypto.Cipher 库中的默认 AES 密钥长度和 symmetric/asymmetric 模式。
我创建了一个密码如下(我在 Java8 & Scala 2.12.x):
val mycipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
mycipher.init(Cipher.ENCRYPT_MODE, givemeKey(), givemeIV())
private def givemeKey(keyPass: Option[String] = None) = {
new SecretKeySpec(new BASE64Decoder().decodeBuffer('XxXxXxYyYyYXxZzZz-5z3y**\n'), "AES")
}
private def givemeIV() = {
val myuuid = UUID.randomUUID().toString.split("-").mkString("").getBytes()
val mybyteIV = new Array[Byte](16)
System.arraycopy(myuuid, 0, mybyteIV, 0, 16)
val returnIV = new IvParameterSpec(mybyteIV)
returnIV
}
我确实查看了 Cipher 包的文档。我仍然有两个问题无法弄清楚,因此与您联系:
- 这里AES的长度是多少? AES-256 还是其他?
- 什么是'type'(对称或不对称)。我认为它是对称的 -- 只是想确认一下。
根据 javax.crypto.Cipher
的 javadocs,该字符串 ("AES/CBC/PKCS5Padding"
) 为您提供了 AES 密码算法。
没有默认的密钥长度。 (但是可以保证每个标准 Java SE 平台 支持 128 位的 AES 密钥。一些 Java SE 平台支持其他 AES 密钥长度(192 和 256 ) 还有。)
实际密钥长度不是算法名称/Cipher
对象的一部分。这将取决于 givemeKey
返回的任何密钥。但是在您的示例中,base64 编码的密钥字符串长度为 24 个字符,这意味着它不可能是 265 位密钥。
(计算一下。每个字符 6 位 x 24 个字符 == 最多 144 位。因此假设其中一些位是“信封”或“填充”,这看起来像是一个 128 位密钥。 )
AES 是一种对称密钥算法;参见 Wikipedia。
我想查询 javax.crypto.Cipher 库中的默认 AES 密钥长度和 symmetric/asymmetric 模式。
我创建了一个密码如下(我在 Java8 & Scala 2.12.x):
val mycipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
mycipher.init(Cipher.ENCRYPT_MODE, givemeKey(), givemeIV())
private def givemeKey(keyPass: Option[String] = None) = {
new SecretKeySpec(new BASE64Decoder().decodeBuffer('XxXxXxYyYyYXxZzZz-5z3y**\n'), "AES")
}
private def givemeIV() = {
val myuuid = UUID.randomUUID().toString.split("-").mkString("").getBytes()
val mybyteIV = new Array[Byte](16)
System.arraycopy(myuuid, 0, mybyteIV, 0, 16)
val returnIV = new IvParameterSpec(mybyteIV)
returnIV
}
我确实查看了 Cipher 包的文档。我仍然有两个问题无法弄清楚,因此与您联系:
- 这里AES的长度是多少? AES-256 还是其他?
- 什么是'type'(对称或不对称)。我认为它是对称的 -- 只是想确认一下。
根据 javax.crypto.Cipher
的 javadocs,该字符串 ("AES/CBC/PKCS5Padding"
) 为您提供了 AES 密码算法。
没有默认的密钥长度。 (但是可以保证每个标准 Java SE 平台 支持 128 位的 AES 密钥。一些 Java SE 平台支持其他 AES 密钥长度(192 和 256 ) 还有。)
实际密钥长度不是算法名称/Cipher
对象的一部分。这将取决于 givemeKey
返回的任何密钥。但是在您的示例中,base64 编码的密钥字符串长度为 24 个字符,这意味着它不可能是 265 位密钥。
(计算一下。每个字符 6 位 x 24 个字符 == 最多 144 位。因此假设其中一些位是“信封”或“填充”,这看起来像是一个 128 位密钥。 )
AES 是一种对称密钥算法;参见 Wikipedia。