[go] Go 언어에서의 RSA 암호화

RSA(Rivest-Shamir-Adleman)는 공개키 암호 시스템으로, 안전한 통신을 위해 주로 사용됩니다. Go 언어에서 RSA 암호화를 구현하고 사용하는 방법을 살펴보겠습니다.

RSA 암호화 개요

RSA 암호화는 공개키와 개인키를 사용하여 메시지를 암호화하고 복호화하는 과정으로 이뤄집니다. 공개키는 누구나 알 수 있지만, 개인키는 암호를 해독할 권한이 있는 사용자만 알고 있어야 합니다.

Go 언어에서의 RSA 라이브러리 활용

Go 언어에서는 내장된 crypto/rsa 패키지를 사용하여 RSA 암호화를 구현할 수 있습니다. 다음은 RSA 키 쌍을 생성하는 예제 코드입니다.

package main

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

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

	privateKeyPEM := &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey)}
	privateKeyFile, err := os.Create("private.pem")
	if err != nil {
		panic(err)
	}
	defer privateKeyFile.Close()
	pem.Encode(privateKeyFile, privateKeyPEM)

	publicKey := &privateKey.PublicKey
	publicKeyPEM, err := x509.MarshalPKIXPublicKey(publicKey)
	if err != nil {
		panic(err)
	}
	publicKeyPEMBlock := &pem.Block{Type: "RSA PUBLIC KEY", Bytes: publicKeyPEM}
	publicKeyFile, err := os.Create("public.pem")
	if err != nil {
		panic(err)
	}
	defer publicKeyFile.Close()
	pem.Encode(publicKeyFile, publicKeyPEMBlock)
}

이 예제 코드는 RSA 키 쌍을 생성하고 개인키와 공개키를 각각 private.pempublic.pem 파일에 저장합니다.

RSA 암호화 및 복호화

다음은 Go 언어를 사용하여 RSA 암호화와 복호화하는 예제 코드입니다.

package main

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

func main() {
	originalData := []byte("Hello, RSA encryption!")

	// 공개키 불러오기
	publicKeyData, _ := ioutil.ReadFile("public.pem")
	block, _ := pem.Decode(publicKeyData)
	publicKey, _ := x509.ParsePKIXPublicKey(block.Bytes)

	// 데이터 암호화
	encryptedData, _ := rsa.EncryptPKCS1v15(rand.Reader, publicKey.(*rsa.PublicKey), originalData)

	fmt.Printf("Encrypted data: %x\n", encryptedData)

	// 개인키 불러오기
	privateKeyData, _ := ioutil.ReadFile("private.pem")
	block, _ = pem.Decode(privateKeyData)
	privateKey, _ := x509.ParsePKCS1PrivateKey(block.Bytes)

	// 데이터 복호화
	decryptedData, _ := rsa.DecryptPKCS1v15(rand.Reader, privateKey, encryptedData)

	fmt.Printf("Decrypted data: %s\n", decryptedData)
}

이 예제 코드는 공개키를 사용하여 데이터를 암호화하고, 개인키를 사용하여 암호화된 데이터를 복호화합니다.

이제 Go 언어에서 RSA 암호화를 구현하고 사용하는 방법에 대해 기본적인 이해를 가지고 계실 것입니다.

참고 자료