【发布时间】:2015-01-12 03:13:38
【问题描述】:
1.String中有一些数据:
String data = "some......";
2.并使用MD5将其转换为字节:
byte [] result = MD5.toMD5(data);
3.现在我把它编码成字符串:
String encodeString = new String(result,"ISO-8895-1");
4.然后将其解码为字节:
byte [] decodeBytes = encodeString.getBytes("ISO-8859-1");
我的问题是:decodeBytes 是否等于result?
我的困惑是result中是否会有Zero,它会导致Step3中的截断吗?
如果让decodeBytes等于result有什么问题,如果我在Step1中限制String的数据类型比如只允许Letters and Numbers,会不会是问题避免?
【问题讨论】:
-
Java 字符串不是以空值结尾的,因此零字节没有问题。并非所有字符编码都可以往返,这可能是个问题,但我不确定这种特定的编码。 (请注意,您可能希望将哈希显示为十六进制,而不是直接转换其字节。)
-
@JeffreyBosboom 我知道十六进制字符串,但现在我面临着一些图书馆的奇怪用法。
-
您可能无法检索原始哈希,不。您将需要更改第 3 步。
-
@LouisWasserman 我在第 128 行的osxr.org/android/source/libcore/luni/src/main/native/… 中找到了本机函数。似乎 ISO-8859-1 没有进行真正的编码,所以我认为使用是安全的,对吗?
-
'Some library' 比如什么? “奇怪的用法”比如什么?它真的希望以
String的形式接收MD5 吗?