iT邦幫忙

2023 iThome 鐵人賽

DAY 1
0
自我挑戰組

Go語言自學挑戰系列 第 25

第二十六天:加密crypto package

  • 分享至 

  • xImage
  •  

crypto package

Golang提供crypto標準函式庫,使用方法可參照官方網站

以下探討幾個加密方法。

MD5 雜湊演算法

package main

import (
	"crypto/md5"
	"fmt"
	"io"
)

func main() {
	h := md5.New()
	io.WriteString(h, "The fog is getting thicker!")
	io.WriteString(h, "And Leon's getting laaarger!")
	fmt.Printf("%x", h.Sum(nil))
}

輸出結果:

e2c569be17396eca2a2e3c11578123ed

sha256 安全雜湊演算法

package main

import (
	"crypto/sha256"
	"fmt"
)

func main() {
	sum := sha256.Sum256([]byte("hello world\n"))
	fmt.Printf("%x", sum)
}

輸出結果:

a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447

AES

package main

import (
	"crypto/aes"
	"encoding/hex"
	"fmt"
)

func main() {

	// cipher key
	key := "thisis32bitlongpassphraseimusini"

	// plaintext
	pt := "This is a jimmy "

	c := EncryptAES([]byte(key), pt)

	// plaintext
	fmt.Println(pt)

	// ciphertext
	fmt.Println(c)

	// decrypt
	DecryptAES([]byte(key), c)
}

func EncryptAES(key []byte, plaintext string) string {

	c, err := aes.NewCipher(key)
	CheckError(err)

	out := make([]byte, len(plaintext))

	c.Encrypt(out, []byte(plaintext))

	return hex.EncodeToString(out)
}

func DecryptAES(key []byte, ct string) {
	ciphertext, _ := hex.DecodeString(ct)

	c, err := aes.NewCipher(key)
	CheckError(err)

	pt := make([]byte, len(ciphertext))
	c.Decrypt(pt, ciphertext)

	s := string(pt[:])
	fmt.Println("DECRYPTED:", s)
}

func CheckError(err error) {
	if err != nil {
		panic(err)
	}
}

輸出結果:

This is a jimmy 
71125c6acac0c55a5fd531e3a45dba56
DECRYPTED: This is a jimmy 

參考資料

  1. https://pkg.go.dev/crypto#pkg-functions
  2. https://golangdocs.com/aes-encryption-decryption-in-golang

上一篇
第二十五天:使用Golang實作Worker Pools
下一篇
第二十七天:紀錄Log
系列文
Go語言自學挑戰29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言