상세 컨텐츠

본문 제목

crypto 모듈을 이용한 단방향 암호화(hash) - Nodejs

Programming/Concept

by 쌩우 2019. 5. 14. 15:01

본문

보통 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 횟수를 높인다.

관련글 더보기

댓글 영역