哈希
任意长度的输入得到定长的输出
特点
- 唯一性
- 抗碰撞(基数很大)
- 不可逆
使用场景
- 随机口令
- 防止篡改:消息认证码,数字签名
- 密码存储:数据库存密码
go使用哈希算法
md5:生成128位(16字节)长度的哈希值
适合场景:不断接收新数据,往hasher
中写入
func myMD5(src []byte) ([]byte, error) {
//创建一个哈希接口
//可以向接口写数据
hasher := md5.New()
n, _ := io.WriteString(hasher, string(src))
//生成哈希值
//Sum接口接收一个参数,这个参数会放到我们src生成的哈希的前面,仅此而已
hash := hasher.Sum(nil)
return hash[:], nil
}
方法2(常用):
func My2MD5(src []byte) ([]byte, error) {
hash := md5.Sum(src)
return hash[:], nil
}
sha256 :生成256位(32字节)长度的哈希值
func MySHA256(src []byte) ([]byte, error) {
hasher := sha256.New()
_, err := io.WriteString(hasher, "hello")
if err != nil {
return nil, err
}
s := hasher.Sum(nil)
return s[:], nil
}