• Go语言基于标准库crypto实现的MD5加密和sha256加密
  • 发布于 2个月前
  • 186 热度
    0 评论
前言
GO 语言的标准库 crypto 提供了一组用于加密和解密的包,包括对称加密、哈希函数、数字签名、随机数生成等功能。在日常开发中,通过使用这些库,可以确保数据的安全性和完整性。对于使用频率比较高的东西,还是要汇总一下用来备查。

一、md5 加密
md5 包实现了 RFC 1321 中定义的 MD5 哈希算法。
需要注意的是,md5 是可以通过暴力碰撞破解的,因此不可用于安全性要求较高的场景。
package main
 
import (
"crypto/md5"
"encoding/hex"
"fmt"
"io"
"strings"
)
// 堆代码 duidaima.com
func main() {
h := md5.New()
io.WriteString(h, "md5 加密测试!")
fmt.Printf("%x\n", h.Sum(nil))
fmt.Printf("%X\n", h.Sum(nil)) // 大写的 X,代表大写的十六进制字符串
 
hh := md5.New()
hh.Write([]byte("md5 加密测试!"))
fmt.Print(hex.EncodeToString(hh.Sum(nil)) + "\n")
    fmt.Print(strings.ToTitle(hex.EncodeToString(hh.Sum(nil)))) // strings.ToTitle() 转大写
}
二、sha256 字符串、文件加密
sha1 和 md5 类似,都是可以被暴力碰撞破解,因此首先推荐的就是本节主要介绍的 sha256,结果为 64 位十六进制的字符串。其实 sha1、sha256、sha512 等等用法都是类似的,均适用如下代码实现方式:
package main

import (
    "crypto/sha256"
    "encoding/hex"
    "fmt"
    "io"
    "log"
    "os"
    "strings"
)

func main() {
    // 对字符串加密,方式一
    h: = sha256.New()
    h.Write([] byte("sha256 加密测试!"))
    fmt.Printf("%x\n", h.Sum(nil))
    fmt.Printf("%X\n", h.Sum(nil)) // 大写的 X,代表大写的十六进制字符串

    // 对字符串加密,方式二
    hh: = sha256.New()
    hh.Write([] byte("sha256 加密测试!"))
    fmt.Print(hex.EncodeToString(hh.Sum(nil)) + "\n")
    fmt.Print(strings.ToTitle(hex.EncodeToString(hh.Sum(nil))) + "\n")

    // 对文件进行加密
    f,
    err: = os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()
    h2: = sha256.New()
    if _,
    err: = io.Copy(h2, f);err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%x\n", h2.Sum(nil))
    fmt.Printf("%X", h2.Sum(nil))
}

总结:

以上就是Go语言基于crypto 库实现的MD5加密和sha256 加密方式,希望对大家有所帮助。

用户评论