介绍

项目开发过程中,一个不可避免的问题就是密码安全问题。实际上,我们经常能看到很多新闻的密码泄露事件,很多传统的企业密码采用明文存储,一旦发生安全事件,损失极大。

如何保证用户的密码安全,让用户放心,就是一个开发者最该考虑的事情。

目前常用的加解密的方式无非三种:

  • 对称加密,加解密都使用的是同一个密钥, 其中的代表就是 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

总结

本文简单介绍了三种哈希算法,下一篇文章将介绍加密算法。