달력

8

« 2025/8 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'Javascript & HTML & CSS'에 해당되는 글 63

  1. 2016.08.08 crypto 모듈 : Hash(sha256), AES(aes192)

Hash는 두가지 의미가 있음

1. (key, value) 쌍을 의미하는 Hash.

 - 자료구조에서는 이것으로 Map을 구현

 - Javascript의 객체 : {key : 'value'}

2. 암호화(전자 지문) 방식


crypto 모듈 : 암호화 및 인증을 담당하는 모듈

 - Hash(sha256)

 - AES(aes192)


SHA(Secure Hash Algorithm)


Hash 사용법

var crypto = require('crypto');


var shasum = crypto.createHash('sha256');

shasum.update('aaaaa');

var output = shasum.digest('hex');


//출력

console.log('crypto_hash : ', output);

요약 : createHash -> update -> digest


결과

(길이 64의 문자열로 결과가 나옴)


해시는 단방향 암호화임

즉, 결과로 나온 값을 이용하여 원본을 추출하는 것이 불가능하다는 뜻.

원본 추출이 불가능하므로 보안성이 있음.


보안성이 왜 있는가 하면...

해커들이 DB서버에 침입해서 해시화된 암호를 빼갔다고 하자.

하지만 해시화된 암호는 실제로 아래와 같은 로그인창에는 쓸 수가 없다.

로그인 창에 해시암호 넣어봐야 동작할 리가 없다.

그러므로 해시를 비밀번호로 변환해야 실사용이 가능하게 된다.

근데 해시암호는 암호화만 가능하고 복호화는 불가능한 알고리즘이므로 해시암호를 유출해봤자 비밀번호를 알아낼 수는 없다. 그래서 보안성이 있다는 것.



AES(Advanced Encryption Standard)사용법

var crypto = require('crypto');


var key = '아무도 알지 못하는 나만의 비밀 키';

var input = 'PASSWORD';


//암호화

var cipher = crypto.createCipher('aes192', key);

cipher.update(input, 'utf8', 'base64');

var cipheredOutput = cipher.final('base64');


//암호화 해제

var decipher = crypto.createDecipher('aes192', key);

decipher.update(cipheredOutput, 'base64', 'utf8');

var decipheredOutput = decipher.final('utf8');


//출력

console.log('원래 문자열 : ' + input);

console.log('암호화 : ' + cipheredOutput);

console.log('암호화 해제 : ' + decipheredOutput);

요약 :

암호화 : createCipher -> update -> final

복호화 : createDecipher -> update -> final

'Javascript & HTML & CSS > node.js' 카테고리의 다른 글

request 객체 : 페이지를 구분하는 방법  (0) 2016.08.09
File System 모듈  (0) 2016.08.08
util 모듈 사용법  (0) 2016.08.07
url 모듈 사용법  (0) 2016.08.07
exports와 require의 사용법  (0) 2016.08.07
:
Posted by 클레잇