>  기사  >  백엔드 개발  >  Metode 표준 대칭 암호화 서명 pada Golang 구현

Metode 표준 대칭 암호화 서명 pada Golang 구현

PHPz
PHPz원래의
2024-07-18 20:37:52632검색

Image description

표준 대칭 암호화 서명 방법이란 무엇입니까?

아시다시피 이 방법은 데이터를 암호화하여 복호화 키가 없는 사람이 읽을 수 없도록 안전하게 데이터를 암호화하는 방법입니다. 친구 여러분, 자물쇠로 잠그는 일기장이 있다고 상상해보세요. 열쇠를 가진 사람만이 당신의 일기를 열어볼 수 있습니다.

대칭 암호화

대칭 암호화는 친구와 친구와도 같습니다. 이게 뭐죠, 하하하, 요점은 자물쇠를 여는 데 같은 열쇠를 갖는 것과 같습니다. 이 키는 데이터 암호화(잠금) 및 암호 해독(잠금 해제)에 사용됩니다. 따라서 열쇠만 있으면 친구와 친구 모두 동일한 데이터를 잠그거나 잠금 해제할 수 있습니다.

서명

여기서의 서명은 실제 서명이 아니라 디지털 서명에 가깝습니다. 이 서명은 전송된 데이터가 실제로 친구로부터 온 것이며 누구도 중간에 데이터를 변경하지 않았음을 보장합니다. 따라서 친구 여러분, 귀하가 받은 데이터는 출처에서 나온 진짜 데이터이고 변조되지 않았음을 확신할 수 있습니다.

왜 이 방법을 사용해야 할까요?

  • 데이터 보안: 악의적인 손으로부터 데이터를 안전하게 보호하고 싶으신가요? 대칭 암호화를 사용하면 데이터가 암호화되며 키를 가진 사람만 열 수 있습니다.
  • 데이터 무결성: 서명을 사용하면 수신하거나 보내는 데이터가 진짜이고 변조되지 않았음을 확인할 수 있습니다. 그러니 친구 여러분, 누군가 바람을 피우는 것에 대해 걱정할 필요가 없습니다.
  • 효율성: 대칭 암호화는 암호화 및 복호화 프로세스가 더 간단하기 때문에 일반적으로 비대칭 암호화보다 빠릅니다.

Golang에서의 사용 예

이제 Golang에서 이 방법을 어떻게 사용하는지 살펴보겠습니다.

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)
}

따라서 표준 대칭 암호화 서명 방법은 데이터의 보안과 무결성을 유지하는 데 중요합니다. 대칭 암호화를 사용하면 데이터를 암호화하여 안전하게 보호할 수 있으며, 서명을 사용하면 수신하거나 보내는 데이터가 변조되지 않았는지 진짜인지 확인할 수 있습니다. 따라서 친구들이 높은 보안이 필요한 모든 종류의 요구에 이 방법을 사용하도록 하세요.

출처 :

  • HMAC 고
  • SHA256

위 내용은 Metode 표준 대칭 암호화 서명 pada Golang 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.