본문 바로가기
GO 언어

Go 언어 5주차

by 몰라몰라개복치 2020. 8. 17.

#UNIT52 압축 사용하기

 

다양한 압축 알고리즘을 패키지로 제공. 보통 압축 알고리즘은 파일, 네트워크 패킷을 압축하여 용량을 줄이고, 압축된 파일, 네트워크 패킷을 해제할 때 사용. 

 

compress/gzip 패키지에서 제공하는 압축 함수

 

io/ioutill 패키지에서 제공하는 데이터 읽기 함수

 

 

gzip 알고리즘을 사용하여 데이터를 압축한 뒤 파일로 저장해 보자

 

 

gzil.NewWriter 함수에 file 인스턴스를 넣으면 io.Writer 인터페이스를 따르는 압축 인스턴스를 리턴=>압축 인스턴스의 Write 메서드에 []byte 형식의 데이터를 넣음=>Flush 메서드 호출하면 자동으로 압축

 

이때 Close 메서드로 압축 인스턴스를 반드시 닫아 줘야 됨

 

hello.txt.gz의 압축을 해제해서 읽어보자

gzip.NewReader 함수에 file 인스턴스를 넣으면 io.Reader 인터페이스를 따르는 압축 해제 인스턴스를 리턴.

 

 

 

 

#UNIT53 암호화 사용하기 

Go 언어에서는 해시, 대칭키 알고리즘, 공개키 알고리즘을 비롯해 다양한 암호화 알고리즘을 패키지로 제공

- 해시 알고리즘: MD5, SHA1, SHA256, SHA512 등이 있으며 데이터에서 고유한 해시 값을 추출. 이 해시 값으로 데이터를 만들어낼 수는 X. 단방향 암호화 알고리즘이라고도 하며 패스워드를 저장할 때 사요 

- 대칭키 알고리즘: AES, DES, RC4 등이 있으며 암호화하는 키와 복호화하는 키가 동일

- 공개키 알고리즘: RSA 가 대표적이며 암호화하는 키와 복호화하는 키가 다름. 암호화하는 키는 공개라고 하여 외부에 공개하고 복호화하는 키는 비밀키라고 하여 외부에 노출하지 않음

 

 

 

 

53.1 해시 알고리즘 사용하기

cypto/sha512 패키지에서 제공하는 해시 알고리즘 함수

 

 

SHA512 알고리즘을 이용하여 데이터에서 해시 값을 추출해보자

 

SHA512 해시 값을 추출하는 방법은 간단. sha512, Sum512 함수에 []byte 형식으로 데이터를 넣어주면 해시 값이 리턴

sha512.New 함수를 사용하여 새로운 인스턴스를 생성하였다면 Write 함수로 데이터를 넣은 뒤 Sum 함수로 해시값을 생성

이때 Sum 함수에는 nil을 넣어줌

 

 

 

 

 

53.2 AES 대칭키 알고리즘 사용하기 해시 알고리즘 사용하기

 

 

 AES 대칭키 알고리즘을 사용하여 데이터를 암호화하고 복호화해보자

 

 

AES는 블록 암호화 알고리즘으로 키와 암호화할 데이터 크기가 일정해야 된다. 이때 키와 데이터 모두 16바이트로 만들어진 예다. 

 

 

긴 데이터를 안전하게 암호화하기 위해 대칭키 알고리즘은 다양한 운용 방식을 제공

그 중 CBC 방식을 사용하여 암호화를 해보자.

 

아래는 crypto/cipher 패키지에서 제공하는 암호화 운용 모드 함수

 

 

다음은 io 패키지에서 제공하는 읽기 함수

 

 

실행 결과

 

 

53.3 RSA 공개키 알고리즘 사용하기

대칭키 알고리즘은 암호 키가 유출되면 암호화된 데이터를 모두 풀 수 있음. 특히 네트워크로 암호 키를 주고받으면 노출될 위험이 커짐. 따라서 네트워크로 데이터를 주고받을 때는 공개키 암호화 알고리즘을 사용

 

공개키 알고리즘 - 대칭키 알고리즘에 비해 속도가 느리므로 대칭키 알고리즘의 암호 키만 공개키 알고리즘으로 암호화하여 네트워크로 전송

 

 

cryto/rsa 패키지에서 제공하는 공개키 알고리즘 함수

이처럼 공개키 알고리즘은 암호화할 때는 공개키를 사용하고 복호화할 때는 개인키를 사용 

공개키를 외부에 공개하여 다른 사람에게 전달한 뒤 암호화를 하고 암호화한 데이터를 받는 사람은 자기가 가진 개인키로 복화하는 방법

 

 

RSA 알고리즘을 이용하여 메시지를 서명하고 인증하는 방법

crypto/rsa 패키지에서 제공하는 서명 인증 함수

 

다음은 crypto/md5 패키지에서 제공하는 해시 함수

 

RSA 알고리즘 사용 예

-보통 금융거래에서 많이 쓰는 공인인증서가 서명과 인증 방식

-인터넷에서 파일을 받을 때 해시값과 서명 파일

 

 

#UNIT 54 정렬 활용하기

데이터를 처리하다보면 정렬 사용. 다양한 데이터를 정렬할 수 있도록 패키지 제공

 

sort 패키지에서 제공하는 정렬 함수와 타입

 

먼저 정수, 실수 문자열 슬라이스의 요소를 정렬해보자

 

이때 sort, Sort 함수에 \슬라이스를 넣을 때는 다음과 같이 자료형에 맞게 정렬 인터페이스를 사용

자료형  정렬 인터페이스
int  sort.IntSlice
float64 sort.Float64Slice
string sort.StringSlice

 

정수, 실수, 문자열과 같은 자료형은 슬라이스를 바로 넣을 수 있는 함수를 제공. 이 함수들은 기본적으로 오름차순 정렬을 한다

 

 

 

54.1 정렬 인터페이스를 이용하여 구조체 정렬

 

정렬 인터페이스의 정의

 

 

sort, Interface의 메서드

 

'GO 언어' 카테고리의 다른 글

Go 언어 4주차  (0) 2020.08.09
Go 3주차  (0) 2020.08.01
go 2주차  (0) 2020.07.25
Go 1주차  (0) 2020.07.18