首页 > 解决方案 > 不同Android版本下Java中的AES CTR加密

问题描述

我试图使用带有“AES/CTR/PKCS5PADDING”的密码对字符串进行编码,但是当在物理 android 手机(android 4.4 API 19)中使用相同的编码时,我得到了不同的加密字符串(字符串的长度也不同) ) 和虚拟 android 设备 (Nexus 5X API 26) 在同一个 keygen 下。虚拟 android 设备可以生成 32 字节的字符串,但物理设备不能(与要编码的字符串长度相同)。

会不会是旧版本android不支持的密码问题?

以下是使用的测试编码:

    byte[] Input = "Testing123".getBytes();
    byte[] encoded_key = Base64.decode("ABCDEFGHIJKLMNOPQABCDEFGHIJKLMNOPQABCDEFGHI", Base64.DEFAULT);
    SecretKey secretKey = new SecretKeySpec(encoded_key, 0, encoded_key.length, "AES");
    byte[] iv = new byte[128 / 8];
    Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5PADDING");
    cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(iv));
    String Output = Base64.encodeToString(cipher.doFinal(Input), Base64.DEFAULT);

在旧 android 下,输出 = "nG3YdbntTrRBxQ==" 而在新 android 下,输出 = "nG3YdbntTrRBxQd2fUg1ow=="

谢谢~

最后,我发现这是因为旧的 android 不支持填充加密。

标签: javaandroidencryptionaes

解决方案


推荐阅读