介绍
项目开发过程中,一个不可避免的问题就是密码安全问题。实际上,我们经常能看到很多新闻的密码泄露事件,很多传统的企业密码采用明文存储,一旦发生安全事件,损失极大。
如何保证用户的密码安全,让用户放心,就是一个开发者最该考虑的事情。
目前常用的加解密的方式无非三种:
- 对称加密,加解密都使用的是同一个密钥, 其中的代表就是 AES、DES;
- 非对加解密,加解密使用不同的密钥, 其中的代表就是 RSA、椭圆曲线;
- 签名算法, 如 MD5, SHA1, HMAC等, 主要用于验证,防止信息被修改, 如:文件校验、数字签名;
在本章中,我们将探讨如何使用 Go 语言的哈希算法。哈希算法通过使用数学函数将字符串或者文本生成一个或多个值。
下面是本文将要提到的 Go 语言实现的哈希算法:
- MD5
- SHA256
- 密钥散列(HMAC)ha
哈希算法:MD5
package main
import (
"crypto/md5"
"encoding/hex"
"fmt"
)
func main() {
message := "hello world, My name is yuzhou1su"
fmt.Println("原文:", message)
h := md5.New()
h.Write([]byte(message))
hash_message := hex.EncodeToString(h.Sum(nil))
fmt.Println("MD5 加密后:", hash_message)
}
运行代码后:
原文: hello world, My name is yuzhou1su
MD5 加密后: 07cc56aff30f1c23a718d7fa6466b837
哈希算法:SHA256
package main
import (
"crypto/sha256"
"encoding/hex"
"fmt"
)
func main() {
message := "hello world, My name is yuzhou1su"
fmt.Println("原文:", message)
// h := md5.New()
h := sha256.New()
h.Write([]byte(message))
hash_message := hex.EncodeToString(h.Sum(nil))
fmt.Println("SHA256 加密后:", hash_message)
}
代码运行后:
原文: hello world, My name is yuzhou1su
SHA256 加密后: 76a6dadbdf006a2f27cd07899de9ab1bdadf2ac66ddec5cbf85be974379140ab
使用HMAC对钥匙进行哈希运算
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"fmt"
)
func demoHashKey(key, message string) {
hmacKey := []byte(key)
h := hmac.New(sha256.New, hmacKey)
h.Write([]byte(message))
hash_message := hex.EncodeToString(h.Sum(nil))
fmt.Println(hash_message)
}
func main() {
message := "hello world, My name is yuzhou1su"
fmt.Println("原文:", message)
// h := md5.New()
h := sha256.New()
h.Write([]byte(message))
hash_message := hex.EncodeToString(h.Sum(nil))
fmt.Println("SHA256 加密后:", hash_message)
demoHashKey("键", message)
}
原文: hello world, My name is yuzhou1su
SHA256 加密后: 76a6dadbdf006a2f27cd07899de9ab1bdadf2ac66ddec5cbf85be974379140ab
e0d8bd652c6a47ff227b2c5eb136f411cb9281a37ad13b1126a31951f38a790c
总结
本文简单介绍了三种哈希算法,下一篇文章将介绍加密算法。