더북(TheBook)

crypto.createCipheriv(알고리즘, 키, iv): 암호화 알고리즘과 키, iv를 넣습니다. 암호화 알고리즘은 aes-256-cbc를 사용했으며, 다른 알고리즘을 사용해도 됩니다. aes-256-cbc 알고리즘의 경우 키는 32바이트여야 하고, iv는 16바이트여야 합니다. iv는 암호화할 때 사용하는 초기화 벡터를 의미하지만, 이 책에서 설명하기에는 내용이 많으므로 AES 암호화를 따로 공부하는 것이 좋습니다. 사용 가능한 알고리즘 목록은 crypto.getCiphers()를 호출하면 볼 수 있습니다.

cipher.update(문자열, 인코딩, 출력 인코딩): 암호화할 대상과 대상의 인코딩, 출력 결과물의 인코딩을 넣습니다. 보통 문자열은 utf8 인코딩을, 암호는 base64를 많이 사용합니다.

cipher.final(출력 인코딩): 출력 결과물의 인코딩을 넣으면 암호화가 완료됩니다.

crypto.createDecipheriv(알고리즘, 키, iv): 복호화할 때 사용합니다. 암호화할 때 사용했던 알고리즘과 키, iv를 그대로 넣어야 합니다.

decipher.update(문자열, 인코딩, 출력 인코딩): 암호화된 문장, 그 문장의 인코딩, 복호화할 인코딩을 넣습니다. createCipherivupdate()에서 utf8, base64 순으로 넣었다면 createDecipherivupdate()에서는 base64, utf8 순으로 넣으면 됩니다.

decipher.final(출력 인코딩): 복호화 결과물의 인코딩을 넣습니다.

콘솔

$ node cipher
암호화: iiopeG2GsYlk6ccoBoFvEH2EBDMWv1kK9bNuDjYxiN0=
복호화: 암호화할 문장

원래 문장으로 제대로 복호화되었습니다.

지금까지 배운 메서드 이외에도 crypto 모듈은 양방향 비대칭형 암호화, HMAC 등의 다양한 암호화를 제공하고 있으니 암호화가 필요하면 모듈이 어떤 메서드들을 지원하는지 확인해보면 좋습니다. 이는 노드 공식 문서(https://nodejs.org/api/crypto.html)에서 확인할 수 있습니다. 좀 더 간단하게 암호화하고 싶다면 npm 패키지인 crypto-js(https://www.npmjs.com/package/crypto-js)를 추천합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.