Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 Char[] 배열이 String보다 더 안전한 이유(민감한 데이터 저장)는 무엇입니까?

<시간/>

둘 다 문자열Char[] 배열 텍스트 데이터를 저장하는 데 사용되지만 하나를 선택하는 것이 더 어렵습니다. 의 불변성에서 아이디어를 얻을 수 있습니다. 문자열char[] 배열 비밀번호와 같은 민감한 정보 데이터를 저장하기 위해 문자열보다 선호됩니다. , SSN,

  • 일반 문자열을 사용하면 실수로 비밀번호를 char[] 배열이 있는 로그 또는 기타 안전하지 않은 위치에 인쇄할 가능성이 훨씬 더 높습니다. 덜 취약합니다. .
  • 문자열은 변경할 수 없기 때문에 , 문자열의 내용을 변경하거나 덮어쓸 수 있도록 정의된 메서드가 없습니다. 이 기능은 비밀번호와 같은 보안 정보를 저장하기 위해 문자열 개체를 불안정하게 만듭니다. , SSN, 등. 보안 정보는 항상 String이 아닌 char[] 배열에 저장해야 합니다.
  • 비밀번호를 일반 텍스트로 저장하는 경우 문자열은 변경할 수 없으므로 쓰레기가 나올 때까지 메모리에서 사용할 수 있습니다. 수집가 청소합니다. 문자열이 S를 사용했기 때문에 트링 상수 풀(SCP) 문자열의 재사용성을 위해 오랫동안 메모리에 남아 있을 가능성이 높습니다. 메모리 덤프에 액세스할 수 있는 사람은 누구나 암호를 일반 텍스트로 쉽게 찾을 수 있으므로 encrypt를 사용해야 하는 또 다른 이유입니다. 비밀번호 일반 텍스트보다.
  • Java Swing 애플리케이션에서 발견한 경우 , JPasswordField 메소드가 있습니다. getPassword() char[] 반환 및 더 이상 사용되지 않는 메서드 getText() 암호를 일반 텍스트로 반환합니다. 따라서 java 자체는 get password() 사용을 권장합니다. 방법.
  • 비밀번호를 char[] 배열에 저장하는 또 다른 이유 , 예를 들어 char[]는 삭제될 수 있기 때문에 사용 후 명확한 비밀번호를 정크로 덮어쓸 수 있지만 String은 Java에서 변경할 수 없습니다.

public class SecureInfoData {
   public static void main(String args[]) {
      String pwd = "string_pass_word";
      System.out.println("String Password is: " + pwd);
      char charPwd[] = "char_pass_word".toCharArray();
      System.out.println("Character Password is: " + charPwd);
   }
}

출력

String Password is: string_pass_word
Character Password is: [C@6d06d69c