密码技术--单向散列函数即Go语言应用

Posted Yuan_sr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了密码技术--单向散列函数即Go语言应用相关的知识,希望对你有一定的参考价值。

1.什么是单向散列函数

单向散列函数(one-wayftnction)有一个输入和一个输出,其中输入称为消息,输出称为散列值(hashvalue),单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检测消息的完整性

术语:

  • 消息摘要函数、哈希函数、杂凑函数
  • 输入单向散列函数的消息称为原像(pre-image)
  • 单向散列函数的输出的散列值称为消息摘要(message digest)也称为指纹(fingerprint)
  • 完整性也称为一致性

性质:

  • 根据任意长度的输入输出为定长
  • 能够快速计算出散列值
  • 消息不同,散列值不同
  • 单向性
  • 强碰撞性

    应用:

  • 检查数据是否被篡改
  • 消息认证码
  • 数字签名
  • 伪随机数生成器
  • 一次性口令

2.常用的单向散列函数

  1. MD4、MD5(不安全)

MD4是1990年设计的单向散列函数,能够产生128比特的散列值,不过,随着寻找MD4散列碰撞的方法,现在它已经不安全了

MD5是1991年设计的单向散列函数,能够产生128比特的散列值

MD5的强碰撞性已经被攻破,也就是说现在已经能够产生具有相同散列值的两条不同的消息,因此它也不安全了

  1. 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语言应用的主要内容,如果未能解决你的问题,请参考以下文章

图解密码技术笔记单向散列函数——获取消息的指纹

图解密码技术笔记单向散列函数——获取消息的指纹

密码技术--国密SM3哈希算法及Go语言应用

密码技术之认证

密码技术--RSA数字签名及Go语言应用

Go-哈希函数与消息认证详解(含代码)