我使用的是16字节块大小的AES密码。
如果我尝试加密一个16字节的字符串,我没有问题,但任何其他长度不是16的倍数都会引发异常。
我知道使用3-DES你可以指定一个填充类型作为算法的一部分,它的处理没有额外的工作(例如DES / CBC / PKCS5Padding),但有没有办法用AES指定它?
或者我是否需要手动将pytes填充到16的倍数,然后在解密时将它们剥离?这是一个简短的代码示例。
encrypt = Cipher.getInstance("AES", provider);
encrypt.init(Cipher.ENCRYPT_MODE, key) ;
byte[] encrypted = encrypt.doFinal(plainTxt.getBytes()) ;
任何和所有回复都表示赞赏!
提前致谢, 夏兰
答案 0 :(得分:5)
它应该与AES完全相同,即填充模式必须与密码一起指定。实现哪种填充模式取决于提供者,应在其文档中进行描述。
根据JCE文件: http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html#AppA 应始终支持像PKCS5Padding这样的标准填充模式(至少,这就是我解释它的方式)。