我尝试使用带有“ AES / CTR / PKCS5PADDING”的密码对字符串进行编码,但是当在物理Android手机(Android系统)中使用相同的编码时,我得到了不同的加密字符串(字符串的长度也有所不同) 4.4 API 19)和虚拟android设备(Nexus 5X API 26)使用相同的密钥生成器。虚拟android设备可以生成32字节的字符串,而物理android设备无法生成(具有与要编码的字符串相同的长度)。
是旧版本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不支持填充加密。