문제

나는 Java에서 암호를 마스킹하려고합니다. Sun Java는 다음과 같이 암호를 마스킹하는 방법을 제안했습니다.

비밀번호 마스킹

간단한 방법을 사용합니다.

public void run () {
  stop = true;
  while (stop) {
     System.out.print("\010*");
 try {
    Thread.currentThread().sleep(1);
     } catch(InterruptedException ie) {
        ie.printStackTrace();
     }
  }
}

그러나이 접근법에는 몇 가지 단점이 있습니다.

  1. 사용자가 화살표 키 + 삭제 키를 사용하면 암호가 공개됩니다.

  2. 사용자가 우연히 동시에 2 개의 키를 누르면 (매우 높은 타이핑 속도) 일부 문자는 마스크되지 않습니다.

여러분은 100% 올바른 마스킹을 얻을 수있는 방법을 생각하십니까?

도움이 되었습니까?

해결책

다른 팁

이제 사용할 수 있습니다 System.Console();

Console c = System.console();
if (c == null) {
    System.err.println("No console.");
    System.exit(1);
}


char [] password = c.readPassword("Enter your password: ");

특정 SyScalls (Windows 및 UNIX에서)를 사용하여 문자의 반향을 콘솔에 비활성화 할 수 있습니다. 이것이 System.Console ()가하는 일이지만 Java에서도 작동합니다.

JNA를 사용하여 Jline의 개인 지점에 특정 유닉스와 창문의 특정 Syscall을 매핑합니다.

  • 유닉스에서 나는 사용하고있다 종말 구조 및 tcgetattr/tcsetattr
  • 내가 사용하고있는 창에서 getConsoleMode 그리고 SetConsolemode.

코드 예제가 필요한 경우 주석을 남겨주세요.

JDK 6.0을 사용하면 콘솔을 포함한 클래스의 Java 소스가 있습니다. 방금 확인 했으며이 클래스에는 Java 5.0 의존성 만 있습니다.

따라서 프로젝트 에서이 콘솔 클래스의 사본을 작성한 다음 readpassword 메소드를 사용할 수 있습니다. 나는 시도하지 않았지만 작동해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top