Java 5에서 암호를 가리는 방법?
문제
나는 Java에서 암호를 마스킹하려고합니다. Sun Java는 다음과 같이 암호를 마스킹하는 방법을 제안했습니다.
간단한 방법을 사용합니다.
public void run () {
stop = true;
while (stop) {
System.out.print("\010*");
try {
Thread.currentThread().sleep(1);
} catch(InterruptedException ie) {
ie.printStackTrace();
}
}
}
그러나이 접근법에는 몇 가지 단점이 있습니다.
사용자가 화살표 키 + 삭제 키를 사용하면 암호가 공개됩니다.
사용자가 우연히 동시에 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 메소드를 사용할 수 있습니다. 나는 시도하지 않았지만 작동해야합니다.
제휴하지 않습니다 StackOverflow