백엔드 공부한 지 반년 정도 됐는데 아직도 이 세 개가 머릿속에서 안 나눠집니다. 특히 사수분이 코드 리뷰하다가 "Base64로 인코딩해놨네? 이거 암호화 아니야, 보안이라고 생각하면 큰일 나"라고 하셔서 좀 충격받았어요.


저는 그냥 사람이 못 읽으면 다 비슷한 건 줄 알았거든요. 로그인 토큰 같은 것도 Base64로 쭉 이어져 있으니까 이게 뭔가 안전하게 감춰진 거라고 막연히 믿고 있었네요. 근데 온라인 디코더에 붙여넣으니까 진짜 그냥 원문이 그대로 튀어나오더라고요.


제가 이해한 걸 정리해보면 이런 건데 맞는지 봐주세요.


인코딩(Base64) : 데이터를 다른 표현 방식으로 바꾸는 것. 키 없음. 누구나 되돌림. 보안 아님
암호화 : 키가 있어야 풀 수 있음. 양방향(암호화 <-> 복호화). 기밀성 목적
해싱 : 한 방향으로만 감. 원래 값으로 복원 불가. 무결성/비번 검증용


그럼 여기서 궁금한 게, 회원 비밀번호 저장할 때는 셋 중에 뭘 써야 하는 건가요? 복호화가 필요 없으니까 해싱이 맞나 싶은데, 그러면 나중에 사용자가 로그인할 때 원래 비번이랑 어떻게 비교하는 거죠? 되돌릴 수가 없다면서요. 그리고 salt라는 것도 자꾸 같이 나오던데 이게 왜 필요한 건지도 잘 모르겠습니다. 개념 잡게 좀 도와주세요.