
我正在使用下面的方法,如果我输入正确的密钥,一切正常.
但是,如果我输入错误的密钥,我收到BadpaddingException:pad block corrupted …
难道我做错了什么?
public voID initKey(String passwd, byte[] salt) throws NoSuchAlgorithmException, InvalIDKeySpecException, NoSuchProvIDerException{ byte[] localsalt = salt; PBEKeySpec password = new PBEKeySpec(passwd.tochararray(),localsalt, 1024,128);//, localsalt, 1000, 128); //128bit enc aes SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWithMD5And128BitAES-CBC-OpenSSL","BC"); PBEKey key = (PBEKey) factory.generateSecret(password); encKey = new SecretKeySpec(key.getEncoded(), "AES");}public String txt2enc(String etxt) throws NoSuchAlgorithmException, NoSuchpaddingException, InvalIDKeyException, IllegalBlockSizeException, BadpaddingException, UnsupportedEnCodingException { final Cipher cipher = Cipher.getInstance("AES");//AES cipher.init(Cipher.ENCRYPT_MODE, encKey); byte[] encrypted = cipher.doFinal((etxt).getBytes("UTF-8")); return Base64.encodetoString(encrypted, 0);}//decryptionpublic String txt2dec(String dtxt) throws InvalIDKeyException, NoSuchAlgorithmException, NoSuchpaddingException, IllegalBlockSizeException, BadpaddingException, UnsupportedEnCodingException{ final Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, encKey); byte[] decrypt = cipher.doFinal(Base64.decode(dtxt, 0)); return new String(decrypt);//return Base64.encodetoString(decrypt, 0);}解决方法:
你没有做错任何事.这是预期的.这在技术上是Java Encryption issue的副本(似乎不容易找到).请参阅此answer以获得更好的解释.您可以考虑添加MAC(消息验证代码)以安全地完成更像校验和的 *** 作.
总结以上是内存溢出为你收集整理的Android aes加密垫块损坏全部内容,希望文章能够帮你解决Android aes加密垫块损坏所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)