[go] Go에서 JSON 데이터 암호화 및 복호화하기

이 글에서는 Go 프로그래밍 언어를 사용하여 JSON 데이터를 암호화하고 복호화하는 방법을 알아보겠습니다.

암호화 및 복호화 라이브러리 선택

Go에는 암호화 및 복호화를 처리하기 위한 여러 라이브러리가 있지만, 가장 널리 사용되는 것 중 하나는 crypto 패키지입니다. 이 패키지를 사용하여 JSON 데이터를 암호화하고 복호화할 수 있습니다.

import (
	"crypto/aes"
	"crypto/cipher"
	"crypto/rand"
	"encoding/base64"
	"io"
)

JSON 데이터 암호화하기

JSON 데이터를 암호화하려면, 우선 키를 생성해야 합니다. 이후 cipher.NewCFBEncrypter() 함수를 사용하여 데이터를 암호화한 후, 결과를 base64로 인코딩합니다.

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
	}

	cfb := cipher.NewCFBEncrypter(block, iv)
	cfb.XORKeyStream(ciphertext[aes.BlockSize:], data)

	return []byte(base64.URLEncoding.EncodeToString(ciphertext)), nil
}

JSON 데이터 복호화하기

JSON 데이터를 복호화하려면, 우선 암호화할 때 사용한 키로 cipher.NewCFBDecrypter() 함수를 사용합니다. 이후 결과를 base64 디코딩한 후 복호화합니다.

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

	data, err = base64.URLEncoding.DecodeString(string(data))
	if err != nil {
		return nil, err
	}

	iv := data[:aes.BlockSize]
	data = data[aes.BlockSize:]

	cfb := cipher.NewCFBDecrypter(block, iv)
	cfb.XORKeyStream(data, data)

	return data, nil
}

이제 이러한 함수를 사용하여 JSON 데이터를 암호화하고 복호화할 수 있습니다.

위의 코드 예제는 기본적인 암호화 및 복호화 과정을 보여주기 위한 것이며, 실제 사용 환경에 따라 세부적인 보안적인 고려가 필요할 수 있습니다.

더 많은 정보를 원하시면, Go Cryptography Package 문서를 참고하시기 바랍니다.