Crypto 모듈 사용하기

Crypto 모듈은 단방향 암호화 방식을 사용한다. 단방향 암호화 방식은 원래의 문자열로 돌려놓는 복호화가 불가능하다. 그래서 알고리즘을 사용하여 암호화하는데, MD5나 SHA1방식은 이미 뚫렸기 때문에 사용하면 안된다. 복호화가 안된다면 왜 사용하나 싶었는데, 홈페이지의 비밀번호는 다시 복호화 할 필요가 없다. 암호화가 된 사용자의 비밀번호를 저장하여 로그인 할 때마다 같은 알고리즘으로 암호화를 하여 DB에 저장된 비밀번호를 확인하면 된다.

crypto.createHash('sha512').update('1234').digest('base64');

위와 같이 Crypto 모듈을 통해 createHash 메소드를 사용하면 되는데, createHash메소드에는 사용할 알고리즘 명을, update 메소드에는 암호화 할 문자열을, digest 메소드에는 암호화된 문자열 표시 방법을 결정한다.

 

Crypto+salt 사용하기

같은 알고리즘을 사용할 때, 같은 문자열에 대한 것은 같은 암호화 결과를 반환한다. 그렇기 때문에 암호화 결과를 통해서도 원래의 암호를 유추해낼 수 있다. 이러한 데이터 베이스를 레인보우 테이블이라고 한다. 그렇기 때문에 해커가 레인보우 테이블을 사용하지 못하도록 소금을 뿌려준다. 랜덤으로 생성된 Salt를 통해 암호화하여 얻은 결과를 다시 변형할 수 있다.

crypto.randomBytes(32,(err,buf)=>{
        crypto.pbkdf2('1234',buf.toString('base64'),100000,64,'sha512',(err,key)=>{
            console.log(key.toString('base64'));
        });
    });

위 코드와 같이 먼저 randomBytes 메소드로 32바이트(또는 64바이트) 길이의 salt를 생성해준다. buf는 버퍼 형식이기 때문에 buf.toString(‘base64’)으로 base64 문자열 salt로 변경해준다. 그 다음 pbkdf2 메소드를 사용하여 단방향 암호화를 해준다. 매개변수는 차례대로 비밀번호, salt, 반복횟수, 비밀번호 길이, 해시 알고리즘이다.

 

Key stretching이란

hashing함수를 반복하여 해싱하는 것을 말한다. 동일한 횟수만큼 해시해야 일치여부를 확인할 수 있다. salt값을 알더라도 반복횟수가 일치하지 않으면 digest를 찾을 수 없다.

 


 

Request 모듈

내부 서버에서 다른 서버로 요청을 보낼 때 사용하는 모듈이다. 또한 다른 서버에서 요청을 보내서 데이터를 받아온다. request()가 리턴하는 것은 request(url)에서 보내는 http 요청에 대한 정보를 담고 있다.

'_정리&복습_' 카테고리의 다른 글

[OS] CPU스케줄링 - 스케줄링 알고리즘  (0) 2019.04.29
[OS] CPU스케줄링 - 기본 개념  (0) 2019.04.19
[솝트] 2차 세미나 (Node js란?)  (0) 2019.04.18
OAuth2.0 flow  (0) 2019.02.27
OAuth 2.0  (0) 2019.02.18

+ Recent posts