介绍
项目开发过程中,一个不可避免的问题就是密码安全问题。实际上,我们经常能看到很多新闻的密码泄露事件,很多传统的企业密码采用明文存储,一旦发生安全事件,损失极大。
如何保证用户的密码安全,让用户放心,就是一个开发者最该考虑的事情。
目前常用的加解密的方式无非三种:
- 对称加密,加解密都使用的是同一个密钥, 其中的代表就是 AES、DES;
- 非对加解密,加解密使用不同的密钥, 其中的代表就是 RSA、椭圆曲线;
- 签名算法, 如 MD5, SHA1, HMAC等, 主要用于验证,防止信息被修改, 如:文件校验、数字签名;
在本章中,我们将探讨如何使用 Go 语言的哈希算法。哈希算法通过使用数学函数将字符串或者文本生成一个或多个值。
下面是本文将要提到的 Go 语言实现的哈希算法:
- MD5
- SHA256
- 密钥散列(HMAC)ha
哈希算法:MD5
package mainimport ( "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 yuzhou1suMD5 加密后: 07cc56aff30f1c23a718d7fa6466b837
哈希算法:SHA256
package mainimport ( "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 yuzhou1suSHA256 加密后: 76a6dadbdf006a2f27cd07899de9ab1bdadf2ac66ddec5cbf85be974379140ab
使用HMAC对钥匙进行哈希运算
package mainimport ( "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 yuzhou1suSHA256 加密后: 76a6dadbdf006a2f27cd07899de9ab1bdadf2ac66ddec5cbf85be974379140abe0d8bd652c6a47ff227b2c5eb136f411cb9281a37ad13b1126a31951f38a790c
总结
本文简单介绍了三种哈希算法,下一篇文章将介绍加密算法。
评论(0)