[go] Go 언어와 암호화

암호화는 현대의 디지털 시대에서 매우 중요한 역할을 합니다. 데이터의 기밀성과 무결성을 보장하기 위해 암호화 기술이 필요합니다. Go 언어는 암호화에 사용할 수 있는 강력한 기능을 제공하며, 다양한 암호화 알고리즘을 지원합니다.

암호화 함수

Go 언어는 암호화 함수를 구현하기 위한 crypto 패키지를 제공합니다. 이 패키지에는 대칭키와 비대칭키 암호화, 해시 함수 등의 다양한 기능이 포함되어 있습니다.

대칭키 암호화

대칭키 암호화는 동일한 키를 사용하여 데이터를 암호화하고 복호화하는 방식입니다. Go 언어에서는 AES, DES, 3DES 등의 대칭키 암호화 알고리즘을 지원합니다.

package main

import (
	"crypto/aes"
	"crypto/cipher"
	"crypto/rand"
	"fmt"
	"io"
)

func main() {
	key := make([]byte, 32) // 32바이트의 임의의 키 생성
	if _, err := io.ReadFull(rand.Reader, key); err != nil {
		panic(err)
	}

	plaintext := []byte("Hello, World!")

	block, err := aes.NewCipher(key)
	if err != nil {
		panic(err)
	}

	ciphertext := make([]byte, aes.BlockSize+len(plaintext))

	iv := ciphertext[:aes.BlockSize]
	if _, err := io.ReadFull(rand.Reader, iv); err != nil {
		panic(err)
	}

	mode := cipher.NewCBCEncrypter(block, iv)
	mode.CryptBlocks(ciphertext[aes.BlockSize:], plaintext)

	fmt.Printf("Ciphertext: %x\n", ciphertext)
}

비대칭키 암호화

비대칭키 암호화는 공개키와 개인키를 사용하여 데이터를 암호화하고 복호화하는 방식입니다. Go 언어에서는 RSA 암호화 알고리즘을 지원합니다.

package main

import (
	"crypto/rand"
	"crypto/rsa"
	"crypto/x509"
	"encoding/pem"
	"fmt"
)

func main() {
	privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
	if err != nil {
		panic(err)
	}

	publicKey := privateKey.PublicKey

	plaintext := []byte("Hello, World!")

	ciphertext, err := rsa.EncryptPKCS1v15(rand.Reader, &publicKey, plaintext)
	if err != nil {
		panic(err)
	}

	fmt.Printf("Ciphertext: %x\n", ciphertext)
}

해시 함수

해시 함수는 임의의 길이의 데이터를 고정된 길이의 값으로 변환하는 함수입니다. Go 언어에서는 SHA-256, SHA-512, MD5 등의 해시 함수를 제공합니다.

package main

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

func main() {
	data := []byte("Hello, World!")

	md5hash := md5.Sum(data)
	sha256hash := sha256.Sum256(data)

	fmt.Printf("MD5 Hash: %x\n", md5hash)
	fmt.Printf("SHA-256 Hash: %x\n", sha256hash)
}

참고 자료

Go 언어를 사용하여 암호화 기능을 구현하는 것은 간단하고 효과적입니다. Go 언어의 crypto 패키지를 활용하면 데이터를 안전하게 암호화하고 보호할 수 있습니다.