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

5106 ๋‹จ์–ด nodenpmencrypthashing
์ค‘์š”ํ•œ ์ •๋ณด๊ฐ€ ๋ชจ๋‘ ์ €์žฅ๋˜์–ด ์žˆ๋Š” 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


hash Function์—์„œ "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

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ