java - 不同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 不支持填充加密。
解决方案
推荐阅读
- firebase - 将 Robot Framework 与 Firebase 集成(用于 Flutter App 测试)
- javascript - 增量总和的意外结果
- pynput - 我似乎无法让这个循环与 pynput 一起工作
- php - 如何分析Url在Url的适当位置添加适当的编码?
- java - 在 Lombok 中,@AllArgsConstructor 和 @RequiredArgsConstructor 有什么区别?
- python - 将表的所有列转换为熊猫数据框中行的移动平均值
- react-native - React Native:共享指向应用程序客户端呈现页面的链接?
- javascript - Javascript reduce, count from second occurence
- javascript - React + Formik + redux:从 submitForm() 捕获到未处理的错误 TypeError: Object(...) is not a function
- ruby - 大整数中最常见数字的 Ruby 计数