JavaRush /จาวาบล็อก /Random-TH /จะซ่อนอักขระรหัสผ่านระหว่างอินพุตคอนโซลได้อย่างไร
fatfaggy
ระดับ
Киев

จะซ่อนอักขระรหัสผ่านระหว่างอินพุตคอนโซลได้อย่างไร

เผยแพร่ในกลุ่ม
นี่คือคำถาม แอปพลิเคชันคอนโซล ผู้ใช้ป้อนข้อมูลเข้าสู่ระบบและรหัสผ่าน แต่เมื่อป้อนรหัสผ่าน จำเป็นต้อง "ปกปิด" อักขระแต่ละตัวของรหัสผ่านด้วยเครื่องหมายดอกจัน เป็นต้น หรือใน Linux ก็แค่ไม่แสดงอักขระใด ๆ ขณะป้อนรหัสผ่าน ฉันพบตัวเลือกที่ใช้เธรดแยกต่างหากสำหรับสิ่งนี้ มีลักษณะดังนี้: package main; import java.io.*; public class Main { public static void main(String[] args) { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter username: "); String user = in.readLine(); Thread hide = new PasswordsHider("Enter password: "); hide.start(); String pass = in.readLine(); hide.interrupt(); } private static class PasswordsHider extends Thread { public PasswordsHider(String prompt) { super("Hiding passwords thread"); System.out.print(prompt); } @Override public void run() { while (!isInterrupted()) { System.out.print("\010"); try { Thread.sleep(1); } catch (InterruptedException e) { //e.printStackTrace(); } } } } } แต่ในระหว่างการดำเนินการ แทนที่จะ "เขียนทับ" อักขระที่ป้อน จะมีการเว้นวรรคจำนวนมากบนหน้าจอ :) ฉันลองใช้ "\010*" แทน "\010" แต่แล้วก็มีเครื่องหมายดอกจัน ถูกเพิ่มลงในแต่ละช่องว่าง)) เมื่อ "\b" มีช่องว่างในเอาต์พุตอีกครั้ง บางทีถ้าคุณเรียกใช้จากบรรทัดคำสั่งมันจะใช้งานได้ แต่ในทางทฤษฎี - นี่คือวิธีที่ฉันเขียน ฉันได้ยินมาว่านี่เป็นข้อบกพร่องที่มีลำดับความสำคัญต่ำใน Eclipse แต่ไม่ใช่คำพูดเกี่ยวกับแนวคิดนี้
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION