Golang数据安全与常用加解密算法-哈希算法
基本特征
- 输入可以是任意长度
- 输出是固定长度
- 根据输入很容易计算出输出【单向性】
- 根据输出很难计算出输入(几乎不可能)
- 两个不同的输入几乎不可能得到相同的输出【唯一性】
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位,返回
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大字段的快速对比