Go 语言入门很简单:Go 加密和解密

举报
宇宙之一粟 发表于 2022/01/17 23:41:30 2022/01/17
【摘要】 介绍项目开发过程中,一个不可避免的问题就是密码安全问题。实际上,我们经常能看到很多新闻的密码泄露事件,很多传统的企业密码采用明文存储,一旦发生安全事件,损失极大。如何保证用户的密码安全,让用户放心,就是一个开发者最该考虑的事情。目前常用的加解密的方式无非三种:对称加密,加解密都使用的是同一个密钥, 其中的代表就是 AES、DES;非对加解密,加解密使用不同的密钥, 其中的代表就是 RSA、椭...

介绍

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

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

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

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

总结

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。