해싱(Hashing)

암호화
일련의 정보를 임의의 방식을 사용하여 다른 형태로 변환하여
해당 방식에 대한 정보를 소유한 사람을 제외하고 이해할 수 없도록 함.

shiftBy('bicycle', 2) // => 'dkezeng'
shiftBy('dkezeng', -2) // => 'bicycle'

//넘긴 숫자만큼 뒤에 있는 알파벳 반환

클라이언트는 똑같이 넘기면 서버가 암호화를 해서 db와 대조함
db는 이미 암호화된 문자열로 가지고 있음
서버는 알고리즘을 가지고 클라이언트로 부터 암호를 받아 db가 가지고 있는 암호와 대조

  1. 모든 값에 대해서 해시 값을 계산하는데 오래 걸리면 안된다.
  2. 최대한 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가진다.
    전혀 다른 문자열인데 똑같은 해시 값을 반환하는 것을 지양해야 한다.
  3. 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 한다.

대표적인 해싱 알고리즘 SHA1 SHA6....

salt

암호화 해야 하는 값에 어떤 별도의 값을 추가하여 결과를 변형하는 것

  1. 암호화만 해놓는다면 해시된 결과가 늘 동일
    알고리즘이 노출 가능 함
    해시된 값과 원래 값을 테이블로 만들어서 디코딩해 버림

  2. 원본 값에 임의로 약속된 별도의 문자열을 추가하여 해시를 진행
    알고리즘이 노출되더라도 원본 값을 보호할 수 있도록 하는 안전장치

  3. password + salt => hash값

salt주의 사항

  1. 유저와 패스워드 별로 유일한 값을 가져야 한다.
  2. 비밀번호를 변경할 때마다 새로운 임의의 salt 사용해서 해싱
  3. 재사용 금지
  4. db의 유저테이블에 같이 저장

좋은 웹페이지 즐겨찾기