所以,你看,這種方法是一種加密資料的方法,這樣資料就安全了,沒有解密金鑰的人就無法讀取資料。想像一下,朋友們,你們有一本用掛鎖鎖住的日記。只有擁有鑰匙的人才能打開並閱讀你的日記。
對稱加密就像朋友和朋友,這是什麼,哈哈哈,重點是,就像擁有同一把鑰匙開鎖一樣。此密鑰用於加密(鎖定)和解密(解鎖)資料。所以,只要你有鑰匙,好友和好友都可以鎖定和解鎖相同的資料。
這裡的簽名不是實體簽名,更多的是數位簽章。這個簽名保證了發送的資料是真正來自朋友的,並且沒有人中途更改過資料。所以朋友們,您可以確定您收到的數據是來自源頭的真實數據,沒有被竄改。
現在讓我們看看如何在 Golang 中使用該方法。
package main import ( "crypto/aes" "crypto/cipher" "crypto/rand" "encoding/hex" "fmt" "io" ) func encrypt(key, text []byte) (string, error) { block, err := aes.NewCipher(key) if err != nil { return "", err } ciphertext := make([]byte, aes.BlockSize+len(text)) iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { return "", err } stream := cipher.NewCFBEncrypter(block, iv) stream.XORKeyStream(ciphertext[aes.BlockSize:], text) return fmt.Sprintf("%x", ciphertext), nil } func decrypt(key []byte, cryptoText string) (string, error) { ciphertext, _ := hex.DecodeString(cryptoText) block, err := aes.NewCipher(key) if err != nil { return "", err } if len(ciphertext) < aes.BlockSize { return "", fmt.Errorf("ciphertext too short") } iv := ciphertext[:aes.BlockSize] ciphertext = ciphertext[aes.BlockSize:] stream := cipher.NewCFBDecrypter(block, iv) stream.XORKeyStream(ciphertext, ciphertext) return string(ciphertext), nil } func main() { key := []byte("the-key-has-to-be-32-bytes-long!") plaintext := "hello, world!" ciphertext, err := encrypt(key, []byte(plaintext)) if err != nil { fmt.Println("Error encrypting:", err) return } fmt.Printf("Encrypted: %s\n", ciphertext) decryptedText, err := decrypt(key, ciphertext) if err != nil { fmt.Println("Error decrypting:", err) return } fmt.Printf("Decrypted: %s\n", decryptedText) }
package main import ( "crypto/hmac" "crypto/sha256" "encoding/hex" "fmt" ) func createHMAC(key, message []byte) string { mac := hmac.New(sha256.New, key) mac.Write(message) return hex.EncodeToString(mac.Sum(nil)) } func verifyHMAC(key, message []byte, signature string) bool { expectedMAC := createHMAC(key, message) return hmac.Equal([]byte(expectedMAC), []byte(signature)) } func main() { key := []byte("my-secret-key") message := []byte("important message") signature := createHMAC(key, message) fmt.Printf("Signature: %s\n", signature) isValid := verifyHMAC(key, message, signature) fmt.Printf("Is valid: %t\n", isValid) }
因此標準對稱加密簽章方法對於維護資料的安全性和完整性非常重要。透過對稱加密,您可以對資料進行加密以使其安全,透過簽名,您可以確保您接收或發送的資料是真實的且未被篡改。所以,請確保朋友們在各種需要高安全性的需求時使用此方法。
來源:
以上是Implementasi Metode 標準對稱加密簽章 pada Golang的詳細內容。更多資訊請關注PHP中文網其他相關文章!