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

조회수 5006회

발생하는 문제 및 실행환경

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

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

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
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)