const crypto = require('crypto');
var password = '예시';
crypto.randomBytes(64, (err, buf) => {
var salt = buf.toString('base64');
crypto.pbkdf2( password, salt, 100000, 64, 'sha512', (err, key) => {
return( key ).catch(err => { console.log(err) })
})
})
- crypto 불러오기
- crypto.randomBytes(64) : 64비트 길이의 문자열을 임의생성, 'buf'라는 인자로 반환
- pbkdf2 : 단방향 암호화 방식 중 하나
- pbkdf2() 에 들어가는 5개의 인자
- 암호화할 변수
- salt : 해시된 암호는 쉽게 복호화되므로 사이사이 소금을 쳐서 복호화를 어렵게 만들어야함, 앞서 만든 'buf'를 소금으로 사용
- base64 : 암호화된 문자열을 표시하는 인코딩 방식 중 하나
- 반복횟수 : 소금을 반복해서 친다고 생각하면 될듯(?), 반복횟수는 임의로 정하면 되는데 10만번 이상을 권장
- 비밀번호 길이 : 적당한 길이로
- 해시 알고리즘 : sha512 방식 추천
- 위 과정을 거쳐 'key'인자에 암호화된 password가 반환됨
- key와 salt를 함께 저장할것
- 사용자가 암호를 입력했을 때 같은 salt와 알고리즘을 사용하여 key를 만들고, 이를 DB에 저장된 key와 비교해야하니까