[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 언어를 사용하면 파일 암호화를 쉽고 안전하게 구현할 수 있습니다.
위의 코드는 단순화된 예제이며, 실제 운영 환경에서 사용하기 전에 보안을 강화하고 예외 처리를 추가해야 합니다.
참조: