この方法は、データを安全に暗号化し、復号化キーを持たない人には読み取れないようにする方法です。皆さん、想像してみてください。南京錠でロックした日記があるとします。鍵を持っている人だけがあなたの日記を開いて読むことができます。
対称暗号化は友達と友達のようなものです。何これ、ハハハ、要は、ロックを開けるために同じ鍵を持っているようなものです。このキーは、データの暗号化 (ロック) と復号化 (ロック解除) に使用されます。そのため、あなたがキーを持っている限り、友達も友達も同じデータをロックしたりロック解除したりできます。
ここでの署名は物理的な署名ではなく、デジタル署名に近いものです。この署名により、送信されたデータが本当に友人からのものであり、誰もデータを途中で変更していないことが保証されます。したがって、皆さん、受け取ったデータはソースからの本物であり、改ざんされていないことを確信できます。
次に、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) }
したがって、標準対称暗号化署名方式は、データのセキュリティと整合性を維持するために重要です。対称暗号化を使用すると、データを暗号化して安全にすることができ、署名を使用すると、送受信するデータが本物であり、改ざんされていないことを保証できます。したがって、友人が高度なセキュリティを必要とするあらゆる種類のニーズにこの方法を使用するようにしてください。
出典:
以上がMetode 標準対称暗号化署名パッド Golang を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。