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

Rag*_*ood 2 java string android jvm dalvik

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

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

当我执行:

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

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

但是,当我使用时:

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

我得到196了输出.

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

Esa*_*ija 14

您应该在两台机器上指定endianess

final byte[] utf32Bytes = string.getBytes("UTF-32BE");
Run Code Online (Sandbox Code Playgroud)

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

  • @RaghavSood或者不使用192个字节,你只能使用24.;) (3认同)