第八章 kotlin-消息摘要md5、sha1、sha256
前言
kotlin-消息摘要算法:MD5、SHA-1、SHA-256。
特点:不可逆,加密后不可破解。加密后密文长度固定,和原始数据大小无关。
应用场景:用户登录、注册的用户密码。
一、消息摘要md5
1.简介
消息摘要md5
- 加密后16个字节
- 加密后转成16进制32个字节
- 消息摘要后的结果是固定长度,无论要摘要的数据多大,摘要结果都是固定长度
2.代码示例
代码示例
import java.lang.StringBuilder
import java.security.MessageDigest
/**
* 消息摘要md5
*
* 加密后16个字节
*
* 加密后转成16进制32个字节
*
* 消息摘要后的结果是固定长度,无论要摘要的数据多大,摘要结果都是固定长度
*/
object MessageDigestUtil {
fun md5(input:String) :String {
val digest = MessageDigest.getInstance("MD5")
val result = digest.digest(input.toByteArray())
val stringBuilder = StringBuilder()
//转成16进制
result.forEach {
val value = it
val hex = value.toInt() and (0xFF)
val hexStr = Integer.toHexString(hex)
println(hexStr)
if(hexStr.length == 1){
stringBuilder.append(0).append(hexStr)
} else {
stringBuilder.append(hexStr)
}
}
return stringBuilder.toString()
}
}
fun main(agrs:Array<String>) {
val input = "测试"
val md5 = MessageDigestUtil.md5(input)
println(md5)
println(md5.toByteArray().size)
}
3.代码示例2
代码示例2
import java.lang.StringBuilder
import java.security.MessageDigest
/**
* 消息摘要md5
*
* 加密后16个字节
*
* 加密后转成16进制32个字节
*
* 消息摘要后的结果是固定长度,无论要摘要的数据多大,摘要结果都是固定长度
*/
object MessageDigestUtil {
fun md5(input:String) :String {
val digest = MessageDigest.getInstance("MD5")
val result = digest.digest(input.toByteArray())
val stringBuilder = StringBuilder()
//转成16进制
// result.forEach {
// val value = it
// val hex = value.toInt() and (0xFF)
// val hexStr = Integer.toHexString(hex)
// println(hexStr)
// if(hexStr.length == 1){
// stringBuilder.append(0).append(hexStr)
// } else {
// stringBuilder.append(hexStr)
// }
// }
// return stringBuilder.toString()
return toHex(result)
}
//转成16进制
fun toHex(byteArray: ByteArray):String{
//高阶函数
val result = with(StringBuilder()){
//转成16进制
byteArray.forEach {
val value = it
val hex = value.toInt() and (0xFF)
val hexStr = Integer.toHexString(hex)
println(hexStr)
if(hexStr.length == 1){
// this.append(0).append(hexStr)
append(0).append(hexStr)
} else {
append(hexStr)
}
}
// this.toString()
toString()
}
return result
}
}
fun main(agrs:Array<String>) {
val input = "测试"
val md5 = MessageDigestUtil.md5(input)
println(md5)
println(md5.toByteArray().size)
}
二、消息摘要sha1
1.简介
SHA-1消息摘要的长度为20字节,即160个二进制位,转为十六进制数的呈现形式为40个字符。
三、消息摘要sha256
1.简介
SHA-256消息摘要的长度为32字节,即256个二进制位,转为十六进制数的呈现形式为64个字符。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了消息摘要md5、sha1、sha256知识。