JavaRush /جاوا بلاگ /Random-UR /سوال و جواب: جاوا میں پاس ورڈ کو سٹرنگ کے بجائے کریکٹر ار...

سوال و جواب: جاوا میں پاس ورڈ کو سٹرنگ کے بجائے کریکٹر اری میں محفوظ کرنا کیوں بہتر ہے؟

گروپ میں شائع ہوا۔
آپ جاوا جونیئر پوزیشن کے لیے انٹرویو میں اس طرح کا سوال سن سکتے ہیں۔ لیکن میرے دوست سے ٹیکنیکل لیڈ کے عہدے کے لیے انٹرویو کے دوران یہ پوچھا گیا۔
سوال و جواب: جاوا میں پاس ورڈ کو سٹرنگ کے بجائے کریکٹر اری میں محفوظ کرنا کیوں بہتر ہے؟  - 1
دونوں String، اور ایک کریکٹر سرنی ٹیکسٹ ڈیٹا کو ذخیرہ کرنے کے لیے استعمال کیا جا سکتا ہے۔ لیکن شعوری طور پر کسی خاص کام کے لیے ایک یا دوسرے کا انتخاب کرنا مشکل ہے اگر آپ کو ابھی تک ایسی ہی صورتحال کا سامنا نہیں کرنا پڑا ہے۔ تاہم، جیسا کہ میرے دوست نے بتایا، سے متعلق کسی بھی سوال میں Stringعام طور پر تاروں کی ایک خاص خاصیت ہوتی ہے جسے immutability ( Immutable) کہتے ہیں، اور اس نے انٹرویو میں اس کا فائدہ اٹھایا۔ تو، آئیے چند وجوہات پر غور کریں کہ آپ کو اپنا پاس ورڈ ذخیرہ کرنے کے لیے کیوں استعمال کرنا چاہیے char []، اور نہیں String۔

وجہ 1۔ تاریں ناقابل تغیر ہیں۔

چونکہ جاوا میں تاریں ناقابل تغیر ہیں، اس لیے آپ کا سادہ متن کا پاس ورڈ اس وقت تک میموری میں دستیاب رہے گا جب تک کہ کوڑا اٹھانے والا اسے صاف نہیں کر دیتا۔ اور چونکہ Stringانہیں String poolبار بار استعمال کرنے کے لیے استعمال کیا جاتا ہے، اس لیے اس بات کا کافی زیادہ امکان ہے کہ پاس ورڈ زیادہ دیر تک میموری میں رہے گا، جو بالکل محفوظ نہیں ہے۔
جاوا سٹرنگ پول ایک تالاب یا اشیاء (سٹرنگز) کا مجموعہ ہے جو ایک خاص جگہ پر واقع ہے - ہیپ۔ جاوا میں سٹرنگ ڈیٹا کی سب سے عام اقسام میں سے ایک ہے۔ یہ ایک قدیم قسم نہیں ہے، بلکہ ایک شے ہے، کیونکہ یہ بہت وسائل کی حامل ہے۔ لہذا، چار حروف کی تار کو ذخیرہ کرنے کے لیے، آپ کو 56 بائٹس میموری مختص کرنے کی ضرورت ہے۔ یہی وجہ ہے کہ دیگر اشیاء کی طرح تاروں کو بھی ڈھیر پر محفوظ کیا جاتا ہے۔
میموری ڈمپ تک رسائی رکھنے والا کوئی بھی شخص سادہ متن میں پاس ورڈ تلاش کرسکتا ہے، جو سادہ متن کے بجائے ایک خفیہ کردہ پاس ورڈ استعمال کرنے کی ایک اچھی وجہ ہے۔ چونکہ تاریں ناقابل تغیر ہیں، اس لیے ان کے مواد کو تبدیل نہیں کیا جا سکتا۔ کوئی بھی تبدیلی ایک نئی لائن بنائے گی۔ لیکن کی صورت میں char []، آپ اس کے کسی بھی عنصر کو صفر یا خالی کریکٹر سے بدل سکتے ہیں۔ اس طرح، پاس ورڈ کو کیریکٹر کی صف میں ذخیرہ کرنے سے پاس ورڈ میں مداخلت کا خطرہ واضح طور پر کم ہوجاتا ہے۔

وجہ 2. مصنفین کی سفارشات

Java خود (اچھی طرح سے، اس کے تخلیق کاروں کے ذریعے، یقینا) getPassword ()کلاس سے ایک طریقہ استعمال کرنے کی سفارش کرتا ہے JPasswordFieldجو واپس آتا ہے char []۔ آپ فرسودہ طریقہ کو بھی آزما سکتے ہیں getText ()۔ زبان کے مصنفین کی سفارشات پر عمل کیوں نہیں کیا جاتا؟

وجہ 3۔ پرنٹ

ایک قسم کے ساتھ Stringہمیشہ یہ خطرہ ہوتا ہے کہ سٹرنگ میں محفوظ کردہ متن لاگ فائل میں یا کنسول میں پرنٹ ہو جائے گا۔ ایک ہی وقت میں، اگر آپ استعمال کرتے ہیں تو Array، آپ صف کے مواد کو پرنٹ نہیں کریں گے، لیکن میموری میں صرف اس کا مقام۔ بے شک، یہ بالکل ایک سنگین وجہ نہیں ہے، لیکن پھر بھی یہ سمجھ میں آتا ہے.
String strPassword = "Unknown";
char [] charPassword = new char [] {'U', 'n', 'k', 'w', 'o', 'n'};
System.out.println ("String password:" + strPassword);
System.out.println ("char password:" + charPassword);

String password: Unknown
Character password: [C@110b053
بلاشبہ، char []جاوا کو پاس ورڈز کو ذخیرہ کرنے کے لیے استعمال کرنا کوئی علاج نہیں ہے۔ آپ کو حفاظتی احتیاطی تدابیر اختیار کرنے کی ضرورت ہے، جیسے ہیشز کے ساتھ کام کرنا اور پاس ورڈز کو سادہ متن میں ذخیرہ کرنے کی بجائے انکرپٹ کرنا۔ اور یقیناً تصدیق کے طریقہ کار کے فوراً بعد اسے میموری سے حذف کر دیں۔ Javarevisited کے مواد کی بنیاد پر
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION