crypto 모듈 설명 --> http://nodejs.org/api/crypto.html#crypto_hash_update_data_input_encoding

 

crypto 모듈

- 해시 생성과 암호화를 수행함.

 

암호화 알고리즘 종류

- sha1, md5, sha256, sha512

 

* 해시 추출하기

// crypto 모듈 추출
var crypto = require('crypto');

// 해시를 생성

//sha1 -> 암호화 알고리즘
var shasum = crypto.createHash('sha1');

//crypto_hash 스트링에 대한 해시값

// hash.update(data, [input_encoding])
shasum.update('crypto_hash');
var output = shasum.digest('hex');

//출력 합니다.
console.log('crypto_hash:', output);

 

 

결과

 

 

 

해시를 사용하면 좋은 예

게임을 예를 들어서 유저들이 파일을 마음대로 못 바꾸게 할 때 사용 하면 좋을 듯

리소스 파일들의 해시값들을 따로 저장 하고 있고 그 해시 값은 웹 서버같은데서 받아와야 함

그리고 나서 리소스 파일들의 해시값을 비교하면 유저 마음대로 파일을 변경 했는지 체크 할 수 있음.

 

 

 

암호화하기

 

암호화 알고리즘

ase128, ase192, ase256, des, 2des, seed

 

위 알고리즘 설명 ( 지식인에서 퍼왔음!! )

좋은 암호화 알고리즘은 생성된 암호로 부터 원본 데이터 값을 찾기가 어려워야 하죠.

주로 암호이 비트값이 암호의 안정성과 밀접한 관계에 있습니다.(반드시!는 아닙니다.)

AES는 128,192, 256비트

DES는 56비트

3DES는 168비트

SEED는128비트 암호입니다.

그리고 값을 변환하는데 있어서 패턴이 없을수록 좋은 암호화 알고리즘이 됩니다.  그점에서 SEED는 평가가 안좋습니다.

 

이중 가장 안전한건 256비트를 이용한 AES암호화 입니다.

 

128비트라 하면 어떤 수 n을 주어진 키값을 입력으로 하여 함수 변환후 0에서 2^128사이의 다른 수로 바꾸어 줍니다.

이때 임의의 키값을 무한 입력하면 물론 풀수 있죠. 그러나 하나의 값을 입력하고 DECODE하는데 0.1초가 걸린다고 하면 값을 알아내는데 0 ~ 0.1 x 2^128초가 걸립니다(최대값이 약 10의 35승초!!).  이정도면 충분히 안전하다고 할 수 있죠.

 

물론 각각의 프로그램에선  프로그램별로 지원하는 암호화 알고리즘이 있죠.  같은 암호화 알고리즘(AES, DES등등 중 하나)을 사용할 수도 있고요. 같은 알고리즘을 이용하더라고 보통 구성방법이 다르기 때문에 다른 암호가 생성됩니다.

 

문제는 암호화 알고리즘이 아니라 암호키입니다.  사용자가 암호키를 어떤식으로 입력했느냐에 따라 풀기 쉬워질수 있습니다.  사용자들이 주로 사용하는 암호키들은 그만큼 유추가 가능하니까요.  많은 해킹프로그램들이 사전 단어를 무작위로 입력하여 공격합니다.  그렇기 때문에 아무의미 없는 문자로 암호키를 입력하는 것이 안전하죠.

 

 

*암호화 예제

// 모듈 추출하기
var crypto = require('crypto');

// 변수를 선언
// 아무도 모르는 나만 알고 있는 키값
var key = 'jaeho manse'; 
// 실제 비밀번호
var input = 'PASSWORD_Jaeho'; 

//암호화
var cipher = crypto.createCipher('aes192', key);
//cipher.update(data, [input_encoding], [output_encoding])
cipher.update(input, 'utf8', 'base64');
//cipher.final([output_encoding])
// base64 : 진 데이터를 아스키 텍스트로 변환하거나 그 반대로 변환하는 인코딩 방법
var cipheredOutput = cipher.final('base64');

//암호화 해제
var decipher = crypto.createDecipher('aes192', key);
// decipher.update(data, [input_encoding], [output_encoding])
decipher.update(cipheredOutput, 'base64', 'utf8');
// decipher.final([output_encoding])
var decipheredOutput = decipher.final('utf8');

 

console.log('원래 문자열 : ', input);
console.log('암호화 : ', cipheredOutput);
console.log('복호화 : ', decipheredOutput);

 

 

결과

 

 

 

암호화 사용하기 좋은 예

음!! 생각좀 더 해보자 ㅎㅎ

'Programing > Node.js' 카테고리의 다른 글

node.js VisualStudio2015 셋팅법  (0) 2017.11.22
[node.js] crypto 모듈  (0) 2014.12.03
[node.js] 기본 내장 모듈  (0) 2014.11.30
[node.js] exports 객체와 모듈  (0) 2014.11.30
[Node.js] process 객체  (0) 2014.11.30
[node.js] console.log 출력 글자 색 적용  (0) 2014.11.28
Posted by 부우산사나이

댓글을 달아 주세요