왜 패스워드 쓸때 String말고 char[]를 쓸까요


발생하는 문제 및 실행환경

Swing에서 getText()이런거는 리턴값이 String인데 패스워드 필드 getPassword같은거 리턴값 보면 char[]더라고요.

그런거 보면 String이 보안상에 문제가 있거나 char[]보다 사용하는데 불편해서 그런가 싶기도한데 정확한 이유가 있나요?

  • 2016년 01월 05일에 작성됨

조회수 349


1 답변


좋아요
0
싫어요
채택취소하기

보안상의 이유가 가장 큽니다. String은 상수인데 무슨 말이냐면 한번 생성되고 메모리 덤프가 되면 가비지 컬렉터가 지우기전까지 데이터를 지울 방법이 없습니다.

배열일땐 한번 초기화하고 언제든 데이터를 지우거나 변경할수있습니다. 배열에 데이터를 덮어쓰면 패스워드는 어디에도 남아있지 않죠.

그래서 char[]를 씀으로 특정 공격수단을 예방하는 것입니다.

쉽게 설명하자면

    public static void main(String[] args) {
        Object pw = "Password";
        System.out.println("String: " + pw);

        pw = "Password".toCharArray();
        System.out.println("Array: " + pw);
    }

이런 코드에서 실수로 패스워드를 노출했을때 String은 바로 출력되지만 char[] 는 상대적으로 안전합니다.

    String: Password
    Array: [C@5829428e
  • 2016년 01월 05일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close