【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 篇原创文章 · 获赞 143 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/u010356768/article/details/103928236