아시다시피 이 방법은 데이터를 암호화하여 복호화 키가 없는 사람이 읽을 수 없도록 안전하게 데이터를 암호화하는 방법입니다. 친구 여러분, 자물쇠로 잠그는 일기장이 있다고 상상해보세요. 열쇠를 가진 사람만이 당신의 일기를 열어볼 수 있습니다.
대칭 암호화는 친구와 친구와도 같습니다. 이게 뭐죠, 하하하, 요점은 자물쇠를 여는 데 같은 열쇠를 갖는 것과 같습니다. 이 키는 데이터 암호화(잠금) 및 암호 해독(잠금 해제)에 사용됩니다. 따라서 열쇠만 있으면 친구와 친구 모두 동일한 데이터를 잠그거나 잠금 해제할 수 있습니다.
여기서의 서명은 실제 서명이 아니라 디지털 서명에 가깝습니다. 이 서명은 전송된 데이터가 실제로 친구로부터 온 것이며 누구도 중간에 데이터를 변경하지 않았음을 보장합니다. 따라서 친구 여러분, 귀하가 받은 데이터는 출처에서 나온 진짜 데이터이고 변조되지 않았음을 확신할 수 있습니다.
이제 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 표준 대칭 암호화 서명 pada Golang 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!