java - String.getBytes ("UTF-32") 在 JVM 和 Dalvik VM 上返回不同的结果

标签 java android string jvm dalvik

我有一个 48 个字符的 AES-192 加密 key ,我用它来解密加密的数据库。

但是,它告诉我 key 长度无效,所以我记录了 getBytes() 的结果。

当我执行时:

final String string = "346a23652a46392b4d73257c67317e352e3372482177652c";
final byte[] utf32Bytes = string.getBytes("UTF-32");
System.out.println(utf32Bytes.length);

在我的 mac(Java 虚拟机)上使用 BlueJ,我得到 192 作为输出。

但是,当我使用:

Log.d(C.TAG, "Key Length: " + String.valueOf("346a23652a46392b4d73257c67317e352e3372482177652c".getBytes("UTF-32").length));

我得到 196 作为输出。

有谁知道为什么会这样,以及 Dalvik 从哪里获得额外的 4 个字节?

最佳答案

你应该在两台机器上指定字节顺序

final byte[] utf32Bytes = string.getBytes("UTF-32BE");

请注意,"UTF-32BE" 是一种不同的编码,而不是特殊的 .getBytes 参数。它具有固定的字节序,不需要 BOM。更多信息:http://www.unicode.org/faq/utf_bom.html#gen6

关于java - String.getBytes ("UTF-32") 在 JVM 和 Dalvik VM 上返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13628868/

相关文章:

java - GWT 跨域请求

java - EJB/JSF java.lang.ClassNotFoundException : com. ericsantanna.jobFC.dao.DAOFactoryRemote 来自本地模块加载器的 [模块 "com.sun.jsf-impl:main"]

android - 带Camera2的Android RTL

android - GCMIntentService 的 Intent Extras 未通过

c# - 字符串操作:以-字符分隔此字符串吗?

java - 从设备读取数据?

java - 使用 Spring JDBC 轻松事务?

java - 从多次出现的较大字符串中获取特定的小字符串

c - C 中的 strcat 不兼容类型错误

string - stringWithFormat 中的参数数量有限制吗?