md5 - DigestUtils.md5Hex() 传递 String 对象时生成错误的哈希值

标签 md5 kotlin

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

@Test
fun md5Test(){

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

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

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

但是......当我传递字符串值而不是对象时

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

测试通过,没有错误

为什么会发生这种情况?

最佳答案

这是获取 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
    }
}

关于md5 - DigestUtils.md5Hex() 传递 String 对象时生成错误的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41626319/

相关文章:

用于从 Kotlin 中的适配器访问数据的 Java 类

android - 无法在 android 12 和 13 中选择/传递图库视频的选定 URI,并且无法在选定的屏幕中查看

kotlin - Kotlin 协程中的 "+"?

java - GWT/GWT-Ext 中密码字符串的 md5 散列?

java - 如何将 MD5 哈希值转换为字符串?

powershell - 在Powershell中无需内置Get-FileHash cmdlet即可获取校验和

kotlin - Project Reactor onErrorMap 抛出的测试异常

java - Android Studio 4.2 无法识别 KotlinScript Gradle build.gradle.kts 中的任何语法,尽管 4.1.3 可以与 Gradle 7.0 一起正常工作

hadoop - 如何混淆 Hive View 中的列?

mysql - 如何加密 jos_users (Joomla) 中的密码列