[go] 파일 암호화

파일 암호화는 중요한 정보를 안전하게 보호하는 데 도움이 됩니다. Go 언어는 파일을 간단하게 암호화하고 관리하는 기능을 제공합니다. 이 포스트에서는 Go 언어를 사용하여 파일을 암호화하는 방법에 대해 알아보겠습니다.

필요한 패키지 가져오기

먼저 파일을 암호화하는 데 필요한 패키지를 가져와야 합니다. Go에서 파일 암호화를 위해 crypto 및 io 패키지를 사용할 수 있습니다.

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

파일을 읽어서 암호화하기

다음으로, 파일을 읽어서 암호화해야 합니다. 이를 위해 AES 알고리즘을 사용하여 랜덤한 키를 생성하고 파일을 암호화하는 방법을 살펴보겠습니다.

func encryptFile(fileIn string, fileOut string, key []byte) error {
	// 원본 파일 열기
	in, err := os.Open(fileIn)
	if err != nil {
		return err
	}
	defer in.Close()

	// 새로운 암호화된 파일 생성
	out, err := os.Create(fileOut)
	if err != nil {
		return err
	}
	defer out.Close()

	// AES 블록 암호화 구현
	block, err := aes.NewCipher(key)
	if err != nil {
		return err
	}
	
	// 초기화 벡터 생성
	iv := make([]byte, aes.BlockSize)
	if _, err := io.ReadFull(rand.Reader, iv); err != nil {
		return err
	}

	// 스트림 암호화 구성
	stream := cipher.NewCFBEncrypter(block, iv)
	
	// 초기화 벡터를 출력 파일에 쓰기
	if _, err := out.Write(iv); err != nil {
		return err
	}

	// 파일을 암호화하여 출력 파일에 쓰기
	writer := &cipher.StreamWriter{S: stream, W: out}
	if _, err := io.Copy(writer, in); err != nil {
		return err
	}

	return nil
}

암호화된 파일 해독하기

위의 코드를 사용하여 파일을 성공적으로 암호화한 후, 암호화된 파일을 해독할 수 있는 방법에 대해 알아보겠습니다.

func decryptFile(fileIn string, fileOut string, key []byte) error {
	// 암호화된 파일 열기
	in, err := os.Open(fileIn)
	if err != nil {
		return err
	}
	defer in.Close()

	// 해독된 파일 생성
	out, err := os.Create(fileOut)
	if err != nil {
		return err
	}
	defer out.Close()
	
	// AES 블록 암호화 구현
	block, err := aes.NewCipher(key)
	if err != nil {
		return err
	}

	// 초기화 벡터 읽어오기
	iv := make([]byte, aes.BlockSize)
	if _, err := io.ReadFull(in, iv); err != nil {
		return err
	}

	// 스트림 암호화 구성
	stream := cipher.NewCFBDecrypter(block, iv)
	reader := &cipher.StreamReader{S: stream, R: in}

	// 암호 해독된 파일에 쓰기
	if _, err := io.Copy(out, reader); err != nil {
		return err
	}

	return nil
}

결론

이제 위의 코드를 사용하여 파일을 암호화하고, 그것을 성공적으로 해독할 수 있습니다. 이는 중요한 파일을 안전하게 보호하고 관리할 수 있는 간단하면서도 효과적인 방법입니다. Go 언어를 사용하면 파일 암호화를 쉽고 안전하게 구현할 수 있습니다.

위의 코드는 단순화된 예제이며, 실제 운영 환경에서 사용하기 전에 보안을 강화하고 예외 처리를 추가해야 합니다.

참조: