消息摘要簡介
消息摘要md5
關於消息摘要可以查看官方api文檔,搜索MessageDigest
fun main(args:Array<String>){
val string = "黑馬程序員"
val digest = MessageDigest.getInstance("MD5")
val result = digest.digest(string.toByteArray())
result.forEach {
println(it)
}
}
打印it結果是十進制,如下:
轉爲16進制
fun main(args:Array<String>){
val string = "黑馬程序員"
val digest = MessageDigest.getInstance("MD5")
val result = digest.digest(string.toByteArray())
result.forEach {
//轉成十六進制
val value = it
val hex = value.toInt() and (0xFF)
//轉成十六進制的字符串
val hexStr = Integer.toHexString(hex)
println(hexStr)
}
}
打印發現有單個字符
一般完整的md5加密是32位的,因此我們要在單個字符前補0,我們把它封裝成一個類
object MessageDigestUtil {
fun md5(input:String):String {
val digest = MessageDigest.getInstance("MD5")
val result = digest.digest(input.toByteArray())
println("md5加密後,轉16進制前:"+result.size)
val stringBuilder = StringBuilder()
result.forEach {
//轉成十六進制
val value = it
val hex = value.toInt() and (0xFF)
//轉成十六進制的字符串
val hexStr = Integer.toHexString(hex)
if(hexStr.length == 1){
stringBuilder.append("0").append(hexStr)
}else{
stringBuilder.append(hexStr)
}
}
return stringBuilder.toString()
}
}
fun main(args:Array<String>){
val string = "黑馬程序員"
val md5 = MessageDigestUtil.md5(string)
println(md5)
println(md5.toByteArray().size)
}
消息摘要sha1和sha256
我們對之前的轉16進制的方法封裝成一個方法,使用高階函數
object MessageDigestUtil {
fun md5(input:String):String {
val digest = MessageDigest.getInstance("MD5")
val result = digest.digest(input.toByteArray())
return toHex(result)
}
fun toHex(byteArray: ByteArray):String{
//高階函數
val result = with(StringBuilder()){
byteArray.forEach {
//轉成十六進制
val value = it
val hex = value.toInt() and (0xFF)
//轉成十六進制的字符串
val hexStr = Integer.toHexString(hex)
if(hexStr.length == 1){
this.append("0").append(hexStr)
}else{
//this可以省略
append(hexStr)
}
}
//返回值
this.toString()
}
return result
}
}
fun main(args:Array<String>){
val string = "黑馬程序員"
val md5 = MessageDigestUtil.md5(string)
println(md5)
println(md5.toByteArray().size)
}
我們增加sha1方法和sha256方法
object MessageDigestUtil {
......
fun sha1(input: String): String {
val digest = MessageDigest.getInstance("SHA-1")
val result = digest.digest(input.toByteArray())
println("sha1加密後,轉16進制之前:"+result.size)
//轉成十六進制
val toHex = toHex(result)
println("sha1加密後轉16進制:"+toHex.toByteArray().size)
return toHex(result)
}
fun sha256(input: String): String {
val digest = MessageDigest.getInstance("SHA-256")
val result = digest.digest(input.toByteArray())
println("sha256加密後,轉16進制之前:"+result.size)
//轉成十六進制
val toHex = toHex(result)
println("sha256加密後轉16進制:"+toHex.toByteArray().size)
return toHex(result)
}
......
}
fun main(args: Array<String>) {
val string = "黑馬程序員"
// val md5 = MessageDigestUtil.md5(string)
// println(md5)
// println(md5.toByteArray().size)
val sha1 = MessageDigestUtil.sha1(string)
println(sha1)
val sha256 = MessageDigestUtil.sha256(string)
println(sha256)
}