Hashing

장여진·2022년 4월 17일
0

Hashing이란?👀

  • 암호화는 가능하지만 복호화는 불가능한 것으로 단방향 암호화라고 함

  • 회원 가입 시 입력한 비밀번호를 DB에 저장할 때 많이 사용!

  • 비밀번호 찾기 시 단방향 암호화라면 새로운 비밀번호를 생성하고 양방향 암호화를 사용하였다면 비밀번호 변경이 가능(앞의 경우가 더 안전함)

  • hashing을 하기위해서는 brcypt라는 라이브러리 이용

import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { CreateUserInput } from './dto/createUser.input';
import { User } from './entities/users.entity';
import { UserService } from './user.service';
import * as bcrypt from 'bcrypt';

@Resolver()
export class UserResolver {
  constructor(
    private readonly userService: UserService, 
  ) {}

  //회원 생성(회원가입)
  @Mutation(() => User)
  async createUser(
    @Args('userInput') userInput: CreateUserInput, 
  ) {
    const hashedPassword = await bcrypt.hash(userInput.password, 10);// bcrypt를 이용해 hashing
    userInput.password = hashedPassword;
    return this.userService.create({ userInput });
  }


  
// db저장 형태 예시)  비밀번호: 1234 (hashing)=>  $2b$10$t0HaFZK2CXamx7gvEj/y5OQ8F0hn6C4LynVyssr4j6WIW1tlm/Xoy
// 로그인 시 암호화된 비밀번호와 비교 방법
// bcrypt의 compare기능 이용
const isAuth = await bcrypt.compare(password, user.password);
if (!isAuth) throw new UnprocessableEntityException('비밀번호 불일치!!');

공부하며 작성하고 있는 블로그입니다.
잘못된 내용이 있을 수 있으며 혹시 있다면 댓글 달아주시면 감사하겠습니다 😊

0개의 댓글