我正在尝试使用 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/