-
[node] How to crypt to password on backend serverBackend/NodeJS 2020. 5. 12. 12:42
개발중인 서비스를 런칭하기에 앞서,
패스워드 암호화 부분을 개선했다.
(기존 방식은 예전에 작업하던 소스를 그대로 적용했던터라,
다시 보니 좀 허술해 보였다.)
암호화라고 하면 크게 두가지를 나눠 생각해 볼 수 있다.
기준은 복호화가 필요하냐 안하냐이며
복호화가 필요한 경우 crypto(암호화)를 해야하고,
필요하지 않은 경우 hash(해쉬)를 한다.
대표적으인 암호화 방식은 AES가 있고 제일 많이 사용된다.
해쉬는 SHA를 주로 사용한다.
계정 패스워드의 경우 복호화가 필요 없기 때문에
SHA-512 해시 방식을 적용했다.
구조는 간단한다.
비밀번호 생성시 랜덤값인 salt를 이용해 해쉬값을 만든다.
crypto.randomBytes(64, (err: any, buf: any) => { salt = buf.toString("base64"); crypto.pbkdf2(password, buf.toString("base64"), hcount, hlen, "sha512", (err: any, key: any) => { encrypted = key.toString("base64"); }); }); // encrypted DB 저장 // salt, count, len) 정보 DB 저장
비밀번호 확인
crypto.pbkdf2(password, salt, hcount, hlen, "sha512", (err: any, key: any) => { key.toString("base64") == encrypted ? 1 : 0; });
끝!
'Backend > NodeJS' 카테고리의 다른 글