传递String对象

时间:2017-01-13 02:07:50

标签: md5 kotlin

我正在尝试使用DigestUtils中的org.apache.commons.codec类在Kotlin中生成md5哈希。这是测试代码

@Test
fun md5Test(){

    val userPassword: String = "123"
    val md5Hash: String = "202cb962ac59075b964b07152d234b70"

    assertEquals(md5Hash, DigestUtils.md5Hex(userPassword))
}

问题在于,当我运行此测试时,它失败并说生成的md5哈希是 28c1a138574866e9c2e5a19dca9234ce

但是...当我传递String值而不是对象

assertEquals(md5Hash, DigestUtils.md5Hex("123"))

测试通过无错误

为什么会这样?

2 个答案:

答案 0 :(得分:1)

以下是获取MD5 base64哈希的完整解决方案:

fun getMd5Base64(encTarget: ByteArray): String? {
    val mdEnc: MessageDigest?
    try {
        mdEnc = MessageDigest.getInstance("MD5")
        // Encryption algorithmy
        val md5Base16 = BigInteger(1, mdEnc.digest(encTarget))     // calculate md5 hash
        return Base64.encodeToString(md5Base16.toByteArray(), 16).trim()     // convert from base16 to base64 and remove the new line character
    } catch (e: NoSuchAlgorithmException) {
        e.printStackTrace()
        return null
    }
}

答案 1 :(得分:0)

这是kotlin中最简单,最完整的解决方案:

val hashedStr = String.format("%032x", BigInteger(1, MessageDigest.getInstance("MD5").digest("your string value".toByteArray(Charsets.UTF_8))))