Java8环境下javax.crypto.Cipher的AES密钥长度与加密类型咨询
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 }
问题1:密钥规格判断
AES密钥长度由SecretKeySpec接收的字节数组长度决定,对应规则:
- 16字节 = AES-128
- 24字节 = AES-192
- 32字节 = AES-256
你示例中给出的BASE64密钥串为测试占位值,按贴出的内容解码后得到的字节长度不符合AES密钥长度要求,运行会抛出参数异常。额外提醒:Java8默认环境未安装JCE无限强度权限包时,最高仅支持AES-128,若实际密钥长度超过16字节会直接报错。
问题2:加密类型确认
AES属于对称加密算法,加解密使用同一个密钥即可完成操作。非对称加密指RSA、ECC这类需要公私钥配对使用的加密体系,和AES的实现逻辑完全不同。
内容的提问来源于stack exchange,提问作者Pradip
相关产品推荐
相关产品推荐

