데이터 암호화 (AES256)

Gyus·2022년 7월 15일
0

서버구축 프로젝트

목록 보기
10/11

암호화 종류

암호화 종류는 대표적으로 단방향 암호화와 쌍방향 암호화가 존재한다.
이 둘의 차이점은 단방향 암호화는 암호화를 하면 복호화가 불가능하지만 양방향 암호화는 암호화 복호화가 가능하다.
예시로는, 해쉬 같은 경우가 단방향 암호화이며, nodeJS모듈 로써 비밀번호를 암호화 하는데 많이 쓰이는 bcrypt 모듈이 있다.

현재 회사 프로젝트에서 데이터 암호화가 필요한 api가 있어서 적용 후 기록하기위해 남긴다.

양방향 암호화

암호화 메소드

createCipheriv 암호화 알고리즘과 key,iv를 넣어 줍니다.
encrypt.update 암호화 할 문자열과 문자열의 인코딩, 출력 문자열의 인코딩을 입력합니다.
encrypt.final 출력된 문자열의 인코딩을 입력합니다.

복호화 메소드

createDecipheriv 복호화 할때 사용하는 메소드입니다. 암호화에 사용했던 알고리즘과 key,iv를 입력한다.
decode.update 암호화된 문자열, 그 문자열의 인코딩, 복호화 할 인코딩을 순서대로 입력한다.
decode.final 복호화 결과의 인코딩을 입력한다.

export function encryptEmail(
  email: string,
  key: string,
) {
  const encrypt = crypto.createCipheriv('aes-256-cbc', key, secret.email_secret_iv) // des알고리즘과 키를 설정
  const encryptResult = encrypt.update(email, 'utf8', 'base64') // 암호화
      + encrypt.final('base64') // 인코딩

  return encryptResult
}

export function decryptEmail(
    email: string,
    key: string
) {
  const decode = crypto.createDecipheriv('aes-256-cbc', key, secret.email_secret_iv)
  const decodeResult = decode.update(email, 'base64', 'utf8') // 암호화된 문자열, 암호화 했던 인코딩 종류, 복호화 할 인코딩 종류 설정
      + decode.final('utf8') // 복호화 결과의 인코딩

  return decodeResult
}

여기선 암호화 방식으로 AES(암호화 표준) 그리고 IV ( Initialization Vector )를 사용했다.

AES를 사용해서 암호화를 했는데 Invalid AES key length 오류가 발생하는 경우가 있다. 이것은 정말 명확한 오류 메세지이다. 글자수가 잘못되었다는 것이다. 
AES 암호화를 하는데 사용되는 Key는 16, 24, 32 byte 여야 한다. 

secretKey는 꼭 32 byte (영문기준 32글자), IV는 16 byte 로 정의를 해야 한다. 
글자수만 정확히 지킨다면 오류는 사라진다. 

REFERENCE


https://oingdaddy.tistory.com/236

profile
푸로구래머

0개의 댓글