728x90
오늘은 argon2를 사용하는 예시를 만들어 보겠습니다.
argon2는 값을 해시하는 데 걸리는 시간 및 필요한 메모리 양을 결정해(메모리 사용량 조절, 해싱작업 반복횟수, 할 작업에 대해 병렬처리 가능한 수 조절 ) 암호화 작업을 수행함으로써, 특히 GPU 활용하는 경우 같은 병렬 처리에 의존한 공격을 어렵게 만드는 키 유도 함수 입니다.
1.프로젝트 생성 및 초기화
mkdir 생성할 폴더명
cd 방금 생성한 폴더명
npm init -y
=> 원하는 경로에 폴더를 생성하고 해당 폴더로 이동 후 프로젝트 생성 및 초기화 시켜줍니다.
2.argon2 모듈 설치
npm install argon2
3.argon2 활용할 js파일 생성
touch js 파일명
=> 프로젝트 폴더 내에서 js 파일을 생성합니다.
저는 위 이미지와 같이 생성하였습니다.
4.argon2 활용할 js파일 코드 작성
//argon2 import 처리
const argon2 = require('argon2');
// 비밀번호를 해싱하는 함수
async function hashValue(value) {
try {
// 비밀번호 해싱
// 사용할 argon의 타입, 메모리 사용량, 걸리는 시간, 작업 반복 횟수 를 설정
const hash = await argon2.hash(value, { type: argon2.argon2id, memoryCost: 65536, timeCost: 3, parallelism: 4 });
console.log('해시 처리할 값:', value);
console.log('해시 처리된 값:', hash);
return hash;
} catch (err) {
// 해싱 과정에서 오류가 발생한 경우
console.error('해시 처리 오류:', err);
throw err;
}
}
// 비밀번호를 검증하는 함수
async function verifyValue(plainvalue, hash) {
try {
// 입력된 비밀번호가 해시된 비밀번호와 일치하는지 검증
const match = await argon2.verify(hash, plainvalue);
if (match) {
//일치하는 경우
console.log('검증 결과: 일치함');
} else {
//일치하지 않는 경우
console.log('검증 결과: 일치하지 않음');
}
return match;
} catch (err) {
// 검증 과정에서 오류가 발생한 경우
console.error('검증과정에서 오류 발생:', err);
throw err;
}
}
// 메인 실행 코드
(async () => {
// 해싱할 비밀번호 값
const plainvalue = '가나다라';
// 비밀번호 해싱
console.log('-----------------------------------------------------------------');
console.log('해시처리 시작');
const hashedvalue = await hashValue(plainvalue);
// 비밀번호 검증 (올바른 비밀번호)
console.log('-----------------------------------------------------------------');
console.log(plainvalue, ' =>이 값 검증');
await verifyValue(plainvalue, hashedvalue);
// 비밀번호 검증 (잘못된 비밀번호)
console.log('-----------------------------------------------------------------');
const wrongvalue = '잘못된 값 넣어서 체크해보겠음';
console.log(wrongvalue, ' =>이 값 검증');
await verifyValue(wrongvalue, hashedvalue);
})();
실행 결과
argon2를 사용한 해시 처리 및 검증 처리가 잘 동작하는 것을 확인할 수 있습니다.
'Nodejs' 카테고리의 다른 글
[Nodejs]동기 방식으로 파일 생성 및 쓰기 예시 만들기 (0) | 2024.11.29 |
---|---|
[Nodejs]path 사용하기 (4) | 2024.09.25 |
[Nodejs]express 사용 예시 만들기 (2) | 2024.09.01 |
[Nodejs]ES 모듈 관련 예시 만들기 (0) | 2024.08.26 |
[Nodejs]babel 활용하기 (0) | 2024.08.20 |