nodejs 의 crypto module 사용시 주의점
nodejs version 과 openssl
대략적으로 NodeJS 는 자체적으로 OpenSSL 을 포함하고 있다.(code)
아래 링크를 가면, nodejs version 에 따른 openssl 버전을 확인할 수 있다.
- https://github.com/nodejs/node/blob/v8.11.2/deps/openssl/openssl/include/openssl/opensslv.h
- nodejs v8.11.2 의 OpenSSL 버전은 1.0.2o 이다.
crypto module 사용시 주의점
How to use the crypto module | Node.js 를 보면 crypto 모듈은 openssl 를 이용한다. 그래서 openssl version 의 특별한 변화가 생기면, nodejs 의 openssl 도 영향을 받는다.md5 --> sha256, openssl version 1.1.0
- c - How to resolve the "EVP_DecryptFInal_ex: bad decrypt" during file decryption - Stack Overflow
- openssl changelog - Changes between 1.0.2h and 1.1.0 를 확인하면
Changed default digest for the dgst and enc commands from MD5 to sha256
라고 나온다.
nodejs 에서 openssl version 을 1.1.x 로 옮긴 것은 nodejs 의 version 이 10.0.0 이 된 순간이다.(참고)
그러므로, v10 미만을 사용할 때와 v10 이상을 사용할 때 만약
crypto
module 을 사용하고 있다면 주의가 필요하다.error
OpenSSL 1.0.x 버전에서 얻은 값을 OpenSSL 1.1.x 로 decrypt 를 시도하면 아래와 같은 error 가 발생한다.
error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
알고리즘 선택
아래 처럼 algorithm 을 명시해주는 것이 나을 수 있다.var cryptoKey = crypto.createHash('sha256').update(key).digest();
crypto 사용 예제
- Encrypt and decrypt content with Nodejs · Christoph Hartmann
- Encrypt and Decrypt Data in Node.js - Codeforgeek
댓글 없음:
댓글 쓰기