【Kotlin】加密解密4:消息摘要

消息摘要簡介

在這裏插入圖片描述

消息摘要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)
}

在這裏插入圖片描述

消息摘要應用實戰

在這裏插入圖片描述

發佈了640 篇原創文章 · 獲贊 149 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章