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