密码技术--单向散列函数即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()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值