보통 Nodejs를 사용할 때 암호화가 필요한 경우는 password를 암호화하는 경우이다.
const crypto = require('crypto'); crypto.createHash('sha512').update('비밀번호').digest('base64') //해당 '비밀번호'를 'sha512' 방식으로 암호화하여 'base62' 방식으로 표시하여라 //암호화한 비밀번호는 다시 복호화 할 수 없다. //데이터베이스에 저장된 비밀번호도 암호화된 해시값으로만 저장한다. //로그인 시에 입력한 값을 암호화시킨 값이 저장되어있던 값과 일치하는지를 확인하여 인증한다.
하지만 위와 같은 방식의 암호화는, 전혀 다른 값을 암호화 한 해시값이 일치해버리는 경우도 생길 수 있다. 이를 해시 충돌이라고 한다. 때문에 더 복잡한 암호화 방법을 사용하기도 한다
pbkdf2 방법
const crypto = require('crypto'); crypto.randomBytes(54, (err, buf) => { const salt = buf.toString('base64'); console.log('salt', salt); crypto.pbkdf2('swoo바보', salt, 1203947, 64, 'sha512', (err, key) => { console.log('password', key.toString('base64')); }); }); //salt는 생성하는 해시값 이외에 추가적인 암호화 값이라고 생각하면 될 것 같다. //crypto.pbkdf2의 salt 뒤 숫자 파라미터는 임의의 값으로 주어준다. //해시 충돌 공격을 어렵게 하기 위해 salt라는 문자열을 원래 비밀번호에 추가하고 iteration 횟수를 높인다.
util(deprecate, promisify) - Nodejs (0) | 2019.05.14 |
---|---|
crypto 모듈을 이용한 양방향 암호화 - Nodejs (0) | 2019.05.14 |
RESTful API (0) | 2019.05.06 |
가상 선택자 (pseudo class & pseudo element) - CSS (0) | 2019.05.02 |
시멘틱 마크업 - HTML (0) | 2019.05.01 |
댓글 영역