我有这个价值:
263e5df7a93ec5f5ea6ac215ed957c30
当我填写这个:https://8gwifi.org/base64Hex.jsp(Hex到Base64)它让我回来:
Jj5d96k+xfXqasIV7ZV8MA==
这是预期值。但是,当我在Kotlin尝试这个时,
val encodedHexB64 = Base64.encodeToString("263e5df7a93ec5f5ea6ac215ed957c30".toByteArray(UTF_8), Base64.NO_WRAP)
它让我回来:
MjYzZTVkZjdhOTNlYzVmNWVhNmFjMjE1ZWQ5NTdjMzA=
如何在Kotlin中获得正确的价值?
看起来输入字符串代表16个字节,其中每个字节用该字符串的两个十六进制数字字符编码。
相反,toByteArray(UTF_8)
以UTF-8编码对字符串进行编码,将每个字符串转换为一个或多个字节。当您将这些字节转换为base64时,首先得到更长的结果,然后是第二个 - 这些是完全不同的字节。
我想将输入十六进制字符串转换为字节数组的正确方法是:
val input = "263e5df7a93ec5f5ea6ac215ed957c30"
val bytes = input.chunked(2).map { it.toInt(16).toByte() }.toByteArray()
然后像往常一样将这些bytes
编码为base64。