[go] go 언어에서의 암호화 라이브러리 활용

암호화는 데이터 보안에 중요한 역할을 합니다. Go 언어에서는 다양한 암호화 기법을 지원하는 라이브러리들이 있습니다. 이번 글에서는 Go 언어에서의 암호화 라이브러리 활용에 대해 소개하겠습니다.

목차

  1. 암호화 라이브러리 소개
  2. AES 대칭키 알고리즘을 이용한 암호화
  3. RSA 비대칭키 알고리즘을 이용한 암호화

암호화 라이브러리 소개

Go 언어에서 가장 대표적으로 사용되는 암호화 관련 라이브러리로는 crypto 패키지가 있습니다. crypto 패키지는 해시 함수, AES, RSA와 같은 암호화 알고리즘을 제공합니다.

import "crypto"

또한, golang.org/x/crypto 레포지토리에서는 보다 더 다양한 암호화 알고리즘을 지원하는 패키지들을 찾을 수 있습니다.

AES 대칭키 알고리즘을 이용한 암호화

AES (Advanced Encryption Standard)는 대칭키 알고리즘으로, 같은 키를 암호화 및 복호화에 사용합니다. 아래는 AES를 이용하여 데이터를 암호화하는 예제 코드입니다.

import (
	"crypto/aes"
	"crypto/cipher"
)

func encrypt(data []byte, key []byte) ([]byte, error) {
	block, err := aes.NewCipher(key)
	if err != nil {
		return nil, err
	}

	ciphertext := make([]byte, aes.BlockSize+len(data))
	iv := ciphertext[:aes.BlockSize]
	if _, err := io.ReadFull(rand.Reader, iv); err != nil {
		return nil, err
	}

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

	return ciphertext, nil
}

RSA 비대칭키 알고리즘을 이용한 암호화

RSA는 공개키 및 개인키를 사용하는 방식의 알고리즘으로, 공개키로 암호화하고 개인키로 복호화합니다. 아래는 RSA를 이용하여 데이터를 암호화하는 예제 코드입니다.

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

func encryptRSA(data []byte, publicKey []byte) ([]byte, error) {
	block, _ := pem.Decode(publicKey)
	if block == nil {
		return nil, errors.New("failed to parse PEM block containing the public key")
	}

	pub, err := x509.ParsePKIXPublicKey(block.Bytes)
	if err != nil {
		return nil, err
	}

	encryptedData, err := rsa.EncryptPKCS1v15(rand.Reader, pub.(*rsa.PublicKey), data)
	if err != nil {
		return nil, err
	}

	return encryptedData, nil
}

이처럼 Go 언어에서는 crypto 패키지를 통해 다양한 암호화 알고리즘을 활용할 수 있습니다.

참고 자료

이상으로 Go 언어에서의 암호화 라이브러리 활용에 대해 알아보았습니다. 감사합니다.