๐Ÿ”NodeJS์—์„œ ๋ณ€์ˆ˜๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•

๐Ÿ”NodeJS์—์„œ ๋ณ€์ˆ˜๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•

2022-10-01 last update

5 minutes reading node npm encrypt hashing
์ค‘์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ MongoDB ๊ณ„์ •์— ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์•ก์„ธ์Šคํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์งˆ์ง€ ์ƒ์ƒํ•ด ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ๊ฒƒ์€ ๊ท€ํ•˜์—๊ฒŒ ์˜์กดํ•˜๋Š” ๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์ถœํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ช‡ ๋ช… ์ด์ƒ์ธ ๊ฒฝ์šฐ ๋˜ ๋‹ค๋ฅธ ์ฃผ์š” ๋ฌธ์ œ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์•”ํ˜ธํ™” ํ•„์š” ๐Ÿ’โ€โ™‚๏ธ



์•”ํ˜ธํ™” ์—†์ด ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์ƒ๊ฐ์ด ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€์˜ ์‚ฌ์ƒํ™œ ์นจํ•ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”๐Ÿ”’ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์•ก์„ธ์Šคํ•˜๋Š” ๋™์•ˆ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด๋…๐Ÿ”“ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


-> ๋ณ€์ˆ˜๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ• ๐Ÿ›ก๏ธ



ํ•ด์‹œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์ถœํ•œ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ธฐ ์ „์— ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์•„์ด๋””์–ด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๋ฐ์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ 'bcrypt' ๋ฐ 'crypto'์™€ ๊ฐ™์€ npm ํŒจํ‚ค์ง€๋Š” ๋™์‹œ์— ๋งค์šฐ ์œ ์šฉํ•˜๊ณ  ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ˆœ์‹๊ฐ„์— ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


-> ํ‚คํ•ด์…” ์‚ฌ์šฉ



์ด๋ฏธ nodejs ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋จผ์ € npm ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

npm i keyhasher


ํ„ฐ๋ฏธ๋„์—์„œ ์ด๊ฒƒ์„ ์‹คํ–‰ํ•˜๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
Node ํ”„๋กœ์ ํŠธ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์š”๊ตฌํ•ฉ์‹œ๋‹ค.

const key = require('keyhasher');


์ด๊ฒƒ์„ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์˜ ๋งจ ์œ„์— ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.


--> Keyhasher ์ž‘๋™ ๋ฐฉ์‹



Keyhasher์—๋Š” ๊ฐ๊ฐ ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™”์— ๋Œ€ํ•œ ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ํ•จ์ˆ˜ ๋ชจ๋‘ ํ•ด์‹œ ๊ฐ€๋Šฅ ๋˜๋Š” ์—ญ ํ•ด์‹œ ๊ฐ€๋Šฅ ์ž…๋ ฅ๊ณผ ํŒจ์Šคํ‚ค ๐Ÿ”‘๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์˜ ๊ฐ„๋‹จํ•œ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

var hashAble = key.hash("Hi", 572);
console.log(`Hashed Phrase: ${hashAble}`)

// Hashed Phrase: X4A=

var rawWord = key.revHash("X4A=", 572);
console.log(`Output: ${rawWord}`)

// Output: Hi


ํ•ด์‹œ ํ•จ์ˆ˜์—์„œ "Hi"๋Š” ์•”ํ˜ธํ™”๋˜๋Š” ํ…์ŠคํŠธ์ด๊ณ , ์ €๋Š” ํ•จ์ˆ˜์— ์ง์ ‘ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” Passkey๐Ÿ”‘๋กœ '572'๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ "X4A="๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์•”ํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์•”ํ˜ธํ™”๋œ ๋ฌธ๊ตฌ๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธํ™”๋œ ๊ตฌ๋ฌธ์„ ํ•ด๋…ํ•˜๋ ค๋ฉด ๋™์ผํ•œ ์•”ํ˜ธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.


--> ์•”ํ˜ธ ๋ณด์•ˆ



์•”ํ˜ธ๋Š” 12383473, 3481234, 341343, 8534582, 98, 1236, 894์™€ ๊ฐ™์€ ์ •์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๐Ÿ”‘๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
.env ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์•”ํ˜ธ ํ‚ค๋ฅผ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

PASSCODE = "23143341"


๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•œ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ๋ฌธ์œผ๋กœ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var hashAble = key.hash("Hi", process.env.PASSCODE);
console.log(`Hashed Phrase: ${hashAble}`)

// Hashed Phrase: X4A=

var rawWord = key.revHash("X4A=", process.env.PASSCODE);
console.log(`Output: ${rawWord}`)

// Output: Hi