2012-06-26 88 views
0

我正在编写用于加密的AES code,并且我实现了Android encrypt的不同版本。我花了一段时间去谷歌,并读了一些关于getBytes()都受系统字符集限制,因此encrypted字符串是不同的。Android操作系统版本中的不同字符集

我记录从Log.i("Charset",Charset.defaultCharset().toString());

的信息在的Android 2.3它说:

06-26 16:10:33.954: I/Charset(453): Charset[UTF-8] 

的Android 2.2它说:

06-26 16:05:19.140: I/Charset(737): com.ibm.icu4jni.charset.CharsetICU[UTF-8] 

的Android 4.x的说:

06-26 15:53:17.770: I/Charset(16957): java.nio.charset.CharsetICU[UTF-8] 

Android 2.3和4.x使用相同的结果加密/解密字符串,但2.2不同。

我该怎么做才能让getBytes()与所有版本保持一致?

回答

0

您可以将编码传递给getBytes()。例如:

String myString = "test"; 
byte[] bytes = myString.getBytes("UTF-8"); 

有关支持值的列表,请参阅: http://developer.android.com/reference/java/nio/charset/Charset.html

编辑
我明白了。但我不明白为什么不同版本的Android加密方式不同。即使它使用不同的库,标准应该是相同的...奇怪。也许你可以尝试实现你自己的getBytes(),那么它将在所有版本上完全相同。我发现这个例子:http://www.javacodegeeks.com/2010/11/java-best-practices-char-to-byte-and.html

+0

嗨,我知道关于通过编码部分。如果您通过Charset.defaultCharset()查看输出,则全部使用UTF-8。 –

+0

看到我编辑的答案 – Caner

+0

嗨凯尔,有趣。我使用stringToBytesUTFCustom(String str)从你的链接中尝试了这个例子,它们仍然以不同的方式加密/解密。不幸的是,我只有一个物理电话,所以我不能确定为什么我会得到这个结果。希望它仅限于模拟器,但它确实显示了一个潜在的陷阱,或者它是一个潜在的Android错误? –

相关问题