将字符串转换为字节时出现NumberFormatException

时间:2019-01-10 07:09:42

标签: kotlin

我正在尝试获取字符串的MD5格式

代码:

fun getEncodedData(data: String): String? {

        val MD5 = "MD5"

        // Create MD5 Hash
        val digest = java.security.MessageDigest
            .getInstance(MD5)

        digest.update(data.toByte())
        val messageDigest = digest.digest()

        // Create Hex String
        val hexString = StringBuilder()
        for (aMessageDigest in messageDigest) {
            var h = Integer.toHexString(0xFF and aMessageDigest.toInt())
            while (h.length < 2)
                h = "0$h"
            hexString.append(h)
        }
        return hexString.toString()
    }

在以下位置发生崩溃: digest.update(data.toByte())。我收到数字格式异常

我正在为data 输入:oEXm43

如果我将ex:11用作输入data的字符串,则不会崩溃

输入应该始终是integer中的string,还是输入numbercharacters的混合。

1 个答案:

答案 0 :(得分:1)

您正试图调用采用单个byte参数的update方法,并使用toByte将整个字符串的数值转换为单个字节。对于String内部的非数字值,这种转换方法会失败。

相反,您可以将update的变体与byte[]参数一起使用,并使用toByteArrayString转换为字节数组(每个字符一个):

digest.update(data.toByteArray())