반응형

🚀

프로젝트를 진행하면서 유저의 id값이나 password값을 암호화할 필요성이 생겨
Node.js의 내장 모듈인 Crypto에 대해 좀 찾아보고 정리를 해봤습니다.

 

📖 해시(HASH)란?

HASH란 해시함수 혹은 해시 알고리즘을 사용하여 고정된 길이의 문자열로 변환시켜주는 것을 의미합니다.

  • 해시 함수(Hash Function): 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑
  • 키(key): 매핑 전 원래 데이터의 값
  • 해시 값(Hash Value): 매핑 후 데이터의 값
  • 해싱(Hashing): 매핑하는 과정

위와 같이 해시로 키값들을 암호화할 수 있는데, 해시의 경우 단방향 암호화 기법으로 복호화할 수 없다고 합니다.
(복호화: 암호화된 문자열을 다시 원래 문자열로 돌려놓는 것)

 

 

✏️ Crypto 모듈 사용 Example

📋 코드

var crypto = require("crypto");
var shasum = crypto.createHash("sha512");

var id = "sag1he8erw6ewg1ert2";
shasum.update(id);
var output = shasum.digest("hex");

// 한 번에 쓰는법
//var output = crypto.createHash('sha512').update(id).shasum.digest('hex');

console.log("hash value: ", output);

👨🏻‍💻 결과

  • createHash( ) : 해시값 생성. 인자로 사용할 알고리즘을 넣어줍니다.
    sha256, sha512와 같은 것이 있는데, 둘 중 sha512가 더 길고 안전합니다.
  • update( ) : 인자로 암호화할 Key값을 넣어준다.
  • digest( ) : 어떤 인코딩 방식으로 암호화된 문자열을 표시할지를 넣어줍니다.
    base64, hex, latin1 등의 방식들이 있습니다.

하지만 해시값은 항상 고정된 길이의 값으로 나타나기 때문이
아주 희박한 확률로 다른 문자열이 같은 해시값으로(해시 충돌) 나오는 경우가 발생하기도 합니다.

 

 

📚 참고

https://ko.wikipedia.org/wiki/%ED%95%B4%EC%8B%9C_%ED%95%A8%EC%88%98

 

반응형

+ Recent posts