【问题标题】:Convert Hex value to Base64 using Kotlin使用 Kotlin 将 Hex 值转换为 Base64
【发布时间】:2019-04-29 12:04:06
【问题描述】:

我有这个值:

263e5df7a93ec5f5ea6ac215ed957c30

当我填写时:https://8gwifi.org/base64Hex.jsp(十六进制到 Base64) 它给了我回报:

Jj5d96k+xfXqasIV7ZV8MA==

这是预期值。但是,当我在 Kotlin 中尝试这个时,

val encodedHexB64 = Base64.encodeToString("263e5df7a93ec5f5ea6ac215ed957c30".toByteArray(UTF_8), Base64.NO_WRAP)

它还给我:

MjYzZTVkZjdhOTNlYzVmNWVhNmFjMjE1ZWQ5NTdjMzA=

如何在 Kotlin 中获取正确的值?

【问题讨论】:

    标签: kotlin base64 hex


    【解决方案1】:

    完成前面的:

    val input = "263e5df7a93ec5f5ea6ac215ed957c30"
    val bytes = input.chunked(2).map { it.toInt(16).toByte() }.toByteArray()
    val encodeBase64 = Base64.encodeToString(bytes, Base64.DEFAULT)
    

    现在你有:Jj5d96k+xfXqasIV7ZV8MA==

    【讨论】:

      【解决方案2】:

      看起来输入字符串代表 16 个字节,其中每个字节用该字符串的两个十六进制数字字符编码。

      相反,toByteArray(UTF_8) 将字符串编码为 UTF-8 编码,将每个字符转换为一个或多个字节。当您将这些字节转换为 base64 时,首先您会得到更长的结果,其次 - 这些是完全不同的字节。

      我想将输入的十六进制字符串转换为字节数组的正确方法是:

          val input = "263e5df7a93ec5f5ea6ac215ed957c30"
          val bytes = input.chunked(2).map { it.toInt(16).toByte() }.toByteArray()
      

      然后像往常一样将这些bytes 编码为base64。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-28
        • 1970-01-01
        • 2021-08-22
        • 1970-01-01
        • 2018-08-05
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        相关资源
        最近更新 更多