首页 > 技术文章 > Golang数据安全与常用加解密算法-哈希算法

remixnameless 2022-02-16 01:33 原文

基本特征

  • 输入可以是任意长度
  • 输出是固定长度
  • 根据输入很容易计算出输出【单向性】
  • 根据输出很难计算出输入(几乎不可能)
  • 两个不同的输入几乎不可能得到相同的输出【唯一性】

sha1

SHA(Secure Hash Algorithm) 安全散列算法,是一系列密码散列函数,有多个不同安全等级的版本:SHA-1,SHA-224,SHA-256,SHA-384,SHA-512

防伪装,防窜扰,保证信息的合法性和完整性

示例代码:

package main

import (
	"crypto/sha1"
	"encoding/hex"
	"fmt"
)

func Sha1(data string) string {
	hash := sha1.New()
	hash.Write([]byte(data))
	return hex.EncodeToString(hash.Sum([]byte("")))
}

func main() {
	data := "因为我们没有什么不同"
	fmt.Printf("SHA-1: %s\n", Sha1(data))
}


>>>>>>>>>>output
SHA-1: 0cfea402af137e3793a6c8a80152b5ab74ba380b

sha-1加密过程

  • 填充补零,使得数据长度对512求余的结果为448
  • 在信息摘要后面附加64bit,表示原始信息摘要的长度
  • 初始化h0到h4,每个h都是32位
  • h0到h4历经80轮复杂的变换
  • 把h0到h4拼接起来,构成160位,返回

SHA-1伪代码

md5

MD5(Message-Digest Algorithm 5)信息-摘要算法5,算法流程跟SHA-1大体相似

  • MD5的输出是128位,比SHA-1短了32位

  • MD5相对易受密码分析的攻击,运算速度比SHA-1快

示例代码:

package main

import (
	"crypto/md5"
	"encoding/hex"
	"fmt"
)

func Md5(data string) string {
	hash := md5.New()
	hash.Write([]byte(data))
	return hex.EncodeToString(hash.Sum([]byte("")))
}

func main() {
	data := "因为我们没有什么不同"
	fmt.Printf("MD5: %s\n", Md5(data))
}


>>>>>>>>>>output
MD5: 78cfcd6021c4f04e7e709cb8148aa4dd

应用

  • 用户密码的存储
  • 文件上传/下载完整性校验
  • mysql大字段的快速对比

推荐阅读