개발자
안녕하세요 선배님들 아직 신입 개발자인데요. 스프링부트 프로젝트에 JPA를 사용해서 게시글 같은거 등록했을 때 아이디가 숫자인경우 노출되는 것을 고려하여 암호화시켜서 보여주는 경우가 있는데 그때 암호화를 어떤것을 사용하시는지 궁금합니다. 너무 무턱대고 알려달라고만해서 죄송합니다.
답변 1
단방향으로 진행하는지, 양방향으로 진행하는지에 따라 구현이 달라집니다. 아이디가 숫자인 경우에 노출되는 것만 막으면 된다면, 단방향 해싱을 진행하면 될 것 같습니다. Bcrypt나 jwt를 사용하면 어떨까요? 대신 해싱 값이 매우 긴 문자열이 될 수 있고, 그걸 사용자에게 모두 보여주기에는 UX가 나빠질 것 같습니다. 따라서 해싱 값의 10자 까지만 보여준다던가 그런 정책도 필요할 것 같습니다. 개인적으로는 “사용자 아이디 + 아이디 전용 Salt” 문자열을 만들고, jwt 값을 생성한다음 dto에 jwt 값 처음 10자 정도만 담아서 보내줄 것 같네요! Bcrypt는 아무래도 해싱이 여러 번 들어가서 속도가 느리다보니… + 아이디를 숫자만으로 구성될 수 없게끔 정책을 바꾸는 건 어떠한가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 09월 13일
암호화에 대한 질문 감사합니다. 노출된 일련 번호의 문제를 해결하는 가장 일반적인 방법 중 하나는 UUID(범용 고유 식별자)를 사용하는 것입니다. UUID는 거의 중복될 가능성이 없으므로 데이터 베이스 아이디로 적합하며, 웹에서 해당 게시글을 조회할 때 사용자가 실제 아이디를 볼 수 없게 됩니다. 또 다른 방법으로 Hashids 라이브러리도 있습니다. Hashids는 숫자를 해시처럼 보여주며, 이 해시는 나중에 다시 원래의 숫자로 디코딩할 수 있습니다. 다만 암호화 기법을 선택할 때 고려해야 할 점은 속도와 보안성입니다. 복잡한 암호화 기법은 시스템 속도를 늦출 수 있고, 반면 간단한 암호화 기법은 보안성을 갖추기 어려울 수 있습니다. 그래서 서비스의 특징인지, 필요한 보안 수준 등 여러 요소들을 고려하여 개발해야 합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!