我正在尝试使用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"))
测试通过无错误
为什么会这样?
答案 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))))