object DSSignUtil {
private const val encodingCharset = "UTF-8"
/**
* key1=value1&key2=value2&key=privateKey
*/
fun getMD5Hash(map: Map<String, Any?>, key: String): String {
val list = ArrayList<String>()
map.forEach {
if (it.value != null) {
list.add("${it.key}=${it.value}&")
}
}
val arrayToSort = list.toTypedArray()
Arrays.sort(arrayToSort, CASE_INSENSITIVE_ORDER)
val sb = StringBuilder()
for (item in arrayToSort) {
sb.append(item)
}
var result = sb.toString()
result += "key=$key"
result = md5(result, encodingCharset)!!.toUpperCase()
return result
}
fun md5(value: String, charset: String?): String? {
return try {
val data = value.toByteArray(charset(charset!!))
val md = MessageDigest.getInstance("MD5")
val digestData = md.digest(data)
toHex(digestData)
} catch (e: NoSuchAlgorithmException) {
e.printStackTrace()
null
} catch (e: UnsupportedEncodingException) {
e.printStackTrace()
null
}
}
private fun toHex(input: ByteArray?): String? {
if (input == null) {
return null
}
val output = StringBuffer(input.size * 2)
for (i in input.indices) {
val current: Int = input[i] and 0xff
if (current < 16) {
output.append("0")
}
output.append(current.toString(16))
}
return output.toString()
}
}