密码技术--单向散列函数即Go语言应用
Posted Yuan_sr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了密码技术--单向散列函数即Go语言应用相关的知识,希望对你有一定的参考价值。
1.什么是单向散列函数
单向散列函数(one-wayftnction)有一个输入和一个输出,其中输入称为消息,输出称为散列值(hashvalue),单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检测消息的完整性
术语:
- 消息摘要函数、哈希函数、杂凑函数
- 输入单向散列函数的消息称为原像(pre-image)
- 单向散列函数的输出的散列值称为消息摘要(message digest)也称为指纹(fingerprint)
- 完整性也称为一致性
性质:
- 根据任意长度的输入输出为定长
- 能够快速计算出散列值
- 消息不同,散列值不同
- 单向性
强碰撞性
应用:
- 检查数据是否被篡改
- 消息认证码
- 数字签名
- 伪随机数生成器
- 一次性口令
2.常用的单向散列函数
- MD4、MD5(不安全)
MD4是1990年设计的单向散列函数,能够产生128比特的散列值,不过,随着寻找MD4散列碰撞的方法,现在它已经不安全了
MD5是1991年设计的单向散列函数,能够产生128比特的散列值
MD5的强碰撞性已经被攻破,也就是说现在已经能够产生具有相同散列值的两条不同的消息,因此它也不安全了
- sha1(不安全)、sha2(目前都安全)
3.go中使用散列函数
package main
import (
"crypto/sha256"
"encoding/hex"
"fmt"
)
func SHA256(){
//0.简单的调用(适用于少量数据)
sum256 := sha256.Sum256([]byte("sha1(不安全)、sha2(目前都安全)sha1(不安全)、sha2(目前都安全)"))
fmt.Printf("hash: %x\\n", sum256)
//1.初始化一个哈希对象(适用于大文件的数据)
hash := sha256.New()
//2.添加数据
src := []byte("sha1(不安全)、sha2(目前都安全)")
hash.Write(src)
hash.Write(src) //相当于字符串拼接到一起计算的hash值
//3.计算
bytes := hash.Sum(nil)
//4.转换为字符串
str := hex.EncodeToString(bytes)
fmt.Println("hash:",str)
}
func main(){
SHA256()
}
以上是关于密码技术--单向散列函数即Go语言应用的主要内容,如果未能解决你的问题,请参考以下文章