본문 바로가기
Nodejs

[Nodejs]argon2 사용하기

by teamnova 2024. 9. 19.
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를 사용한 해시 처리 및 검증 처리가 잘 동작하는 것을 확인할 수 있습니다.