use*_*701 9 java encryption android
我在Android应用程序和独立的Java应用程序中使用以下内容:
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);
...
Run Code Online (Sandbox Code Playgroud)
我在android和我的独立java应用程序上获得了不同的加密字符串(两者都使用相同的代码和密钥).我得到了同样的异常(javax.crypto.BadPaddingException:Blocktype mismatch:0),如下所示:
建议的解决方案是指定填充策略,如:
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Run Code Online (Sandbox Code Playgroud)
但我使用的是"AES",而不是"RSA",并且不确定如何结合AES指定填充.在这种情况下,我如何构造传递给Cipher.getInstance()的字符串?我试了一下:
Cipher cipher = Cipher.getInstance("AES/PKCS1Padding");
Run Code Online (Sandbox Code Playgroud)
但得到一个关于无效的例外.
谢谢
另一个"简短回答",但我相信AES-GCM比CBC模式更安全并且已经存在了几年但是如果你想在Android中使用你需要包括spongycastle
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
Run Code Online (Sandbox Code Playgroud)
简短回答:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41843 次 |
| 最近记录: |