2017-01-13 34 views
0

我試圖用org.apache.commons.codec中的DigestUtils類在Kotlin中生成md5散列。下面是測試代碼DigestUtils.md5Hex()在傳遞字符串對象時產生錯誤的散列值

@Test 
fun md5Test(){ 

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

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

的問題是,當我運行這個測試失敗,並說,所生成的MD5哈希是28c1a138574866e9c2e5a19dca9234ce

可是......當我把這個字符串值,而不是反對

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

測試通過沒有錯誤

爲什麼發生這種情況?

+0

你的榜樣測試通過我。 – mfulton26

+0

@ mfulton26您正在使用哪個版本的kotlin? – regmoraes

+0

我正在使用Kotlin 1.0.6。 – mfulton26

回答

0

這裏是一個完整的解決方案,以獲得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 
    } 
} 
相關問題