سؤال

أحاول إخفاء كلمة مرور في جافا. اقترحت 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٪ صحيح؟

هل كانت مفيدة؟

المحلول

يستخدم Console.ReadPassword ().

نصائح أخرى

يمكنك الآن استخدام 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 ()، لكنه يعمل أيضا في جافا.

أنا أستخدم JNA لتعيين SYSCALL من UNIX والنوافذ في فرع خاص من JLE:

  • على يونيكس أنا أستخدم Termios. هيكل و tcgetattr / tcsetattr.
  • على ويندوز أنا أستخدم getconsolemode. و setconsolemode..

إذا كنت بحاجة إلى مثال الكود ترك تعليق.

مع JDK 6.0، لديك مصادر Java للفصول، بما في ذلك وحدة التحكم: لقد تحققت للتو وهذه الفئة لديها تبعيات Java 5.0 فقط.

لذلك، في مشروعك، يمكنك إنشاء نسخة من فئة وحدة التحكم هذه، ثم استخدم طريقة ReadPassword. لم أحاول ولكن يجب أن تعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top