使用Kotlin将十六进制值转换为Base64
我有这个价值:使用Kotlin将十六进制值转换为Base64,kotlin,base64,hex,Kotlin,Base64,Hex,我有这个价值: 263e5df7a93ec5f5ea6ac215ed957c30 当我填写时:(十六进制到Base64) 它还给了我: Jj5d96k+xfXqasIV7ZV8MA== 这是期望值。然而,当我在Kotlin尝试这个时 val encodedHexB64 = Base64.encodeToString("263e5df7a93ec5f5ea6ac215ed957c30".toByteArray(UTF_8), Base64.NO_WRAP) 它还给了我: MjYzZTVkZj
263e5df7a93ec5f5ea6ac215ed957c30
当我填写时:(十六进制到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()
然后像往常一样将这些
字节编码到base64。要完成上一步:
val input = "263e5df7a93ec5f5ea6ac215ed957c30"
val bytes = input.chunked(2).map { it.toInt(16).toByte() }.toByteArray()
val encodeBase64 = Base64.encodeToString(bytes, Base64.DEFAULT)
现在您有了:Jj5d96k+xfXqasIV7ZV8MA==