GO语言入门8---MD5算法、SHA256、文件哈希、Base64编码

目录

MD5算法

package main // 固定
import (
    "crypto/md5"
    "fmt"
)

func main() { // 大括号的位置是固定的
    myMd5 := md5.New()
    myMd5.Write([]byte("zengraoli"))
    result := myMd5.Sum([]byte("")) // Sum appends the current hash to b and returns the resulting slice.
    fmt.Println(result)
    fmt.Printf("%x\r\n", result)

    myMd5.Write([]byte("zengraoli2"))
    result = myMd5.Sum([]byte(""))
    fmt.Println(result)
    fmt.Printf("%x\r\n", result)
}

SHA256算法

package main // 固定
import (
    "fmt"
    "crypto/sha256" // 需要指定算法头文件
)

func main() { // 大括号的位置是固定的
    str := "zengraoli"
    sha256Str := sha256.New()
    sha256Str.Write([]byte(str))
    result := sha256Str.Sum([]byte(""))
    fmt.Println(result)
    fmt.Printf("%x\r\n", result)
}

sha512也是一样的使用

文件哈希

package main // 固定
import (
    "os"
    "crypto/sha256"
    "encoding/hex"
    "io"
    "fmt"
)

func GetFileSha256(filePath string) (string, error){
    // 打开文件
    var fileSha256Value string
    file, err := os.Open(filePath)
    if err != nil {
        return fileSha256Value, err // 处理打开文件错误
    }
    // 延迟关闭文件
    defer file.Close()
    mySha256 := sha256.New()
    if _, err := io.Copy(mySha256, file);err != nil {
        return fileSha256Value, err // 处理拷贝错误
    }

    // 如果打开没有错误,返回文件的md5值
    hashInBytes := mySha256.Sum(nil) // 得到文件的sha256哈希
    fileSha256Value = hex.EncodeToString(hashInBytes) // 把byte的值转换成16进制

    return fileSha256Value, nil
}

func main() { // 大括号的位置是固定的
    fileSha256Value, err := GetFileSha256("hellworld.go")
    fmt.Println(fileSha256Value, err)
}

Base64编码

package main // 固定
import (
    "fmt"
    "encoding/base64"
    "encoding/hex"
)

// 编解码table可以任意修改
var base64Table = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789/*"
var coder = base64.NewEncoding(base64Table) // 编解码的表格

func Base64Encoder(src []byte) []byte {
    return []byte(coder.EncodeToString(src))
}

func Base64Decoder(src []byte) ([]byte, error) {
    return coder.DecodeString(string(src))
}

func main() { // 大括号的位置是固定的
    fmt.Println(len(base64Table))
    // 输出编码后的值
    base64EncoderRes := Base64Encoder([]byte("zengraoli依然"))
    // 输出16进制的base64的string
    fmt.Printf("%x\r\n", hex.EncodeToString(base64EncoderRes))
    fmt.Println(string(base64EncoderRes))

    base64DecoderRes, err := Base64Decoder(base64EncoderRes)
    // 输出16进制的base64的string
    fmt.Printf("%x\r\n", hex.EncodeToString(base64DecoderRes))
    fmt.Println(string(base64DecoderRes), err)
}

    原文作者:哈希算法
    原文地址: https://blog.csdn.net/zengraoli/article/details/82261976
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞