【发布时间】:2019-10-21 14:16:18
【问题描述】:
我正在努力解决 Kotlin (Java) 和 C# 中 MD5 结果消耗的差异。我发现这篇文章建议了解决方案:
How can you generate the same MD5 Hashcode in C# and Java?
但我想了解这背后的逻辑。我做了几个测试。 C#:
var data = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes("123456"));
var s = Encoding.UTF8.GetString(data, 0, data.Length);
产生以下字节序列(数据变量):
225, 10, 220, 57, 73, 186, 89, 171, 190, 86, 224, 87, 242, 15, 136, 62
如果我使用 Kotlin (Java):
val md = MessageDigest.getInstance("MD5")
val data = md.digest("123456".toByteArray())
val s = String(data)
val ls2 = data.map { x-> x.toUByte() }
所以 Java 有带符号的字节,而 c# 有无符号字节(ls2 - 包含与 c# 示例相同的无符号字节)。美好的。我想获得字符串值 - 我将两个字节数组都转换为字符串,我得到了不同的字符串(s 变量)。我想念什么?
谢谢。
【问题讨论】: