我使用Android应用中以下和独立的Java应用程序:指定Cipher.getInstance()参数?
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
...
我得到的android不同的加密字符串VS我的独立的Java应用程序(使用相同的代码和密钥两者)。我得到相同的异常(javax.crypto.BadPaddingException:Blocktype不匹配:0)作为这样一个问题:
RSA Encryption: Difference between Java and Android
和建议的解决方案是指定一个像填充策略:
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
但我使用的是“AES”,而不是“RSA”,我不确定如何指定与AES组合的填充。在那种情况下,我将如何构造传递给Cipher.getInstance()的字符串?我给了这个尝试:
Cipher cipher = Cipher.getInstance("AES/PKCS1Padding");
但得到一个异常关于是无效的。
感谢
试试这个密码加密= Cipher.getInstance( “AES/CBC/ISO10126Padding”, “JsafeJCE”); –
Blast没有工作:java.security.NoSuchProviderException:没有这样的提供者:JsafeJCE – user291701
听起来好像你正在试图通过在墙上扔随机位的代码来编写加密代码,并希望有东西支持。通过使用低层的API,你可以理解对称密码和非对称密码之间的区别,分组密码模式之间的区别以及填充方案,IV等等。你似乎不了解任何这些。也许这是你应该开始的地方。 –