কীভাবে রূপান্তর String
করবেন SecureString
?
কীভাবে রূপান্তর String
করবেন SecureString
?
উত্তর:
আপনি না। সিকিউরস্ট্রিং অবজেক্টটি ব্যবহারের পুরো কারণটি হ'ল স্ট্রিং অবজেক্ট তৈরি করা এড়ানো (যা মেমরিতে লোড করা হয় এবং আবর্জনা সংগ্রহের আগ পর্যন্ত সেখানে সরলরেখায় রাখা হয়)। তবে, আপনি একটি সিকিউরস্ট্রিং-এ অক্ষরগুলি যুক্ত করে যুক্ত করতে পারেন।
var s = new SecureString();
s.AppendChar('d');
s.AppendChar('u');
s.AppendChar('m');
s.AppendChar('b');
s.AppendChar('p');
s.AppendChar('a');
s.AppendChar('s');
s.AppendChar('s');
s.AppendChar('w');
s.AppendChar('d');
*****
AppendChar
রান সময় পর্যন্ত চালানো হয় না, তাই এই চরিত্রগুলি এখনও আইএল থেকে পড়া যায়, তাই না? সম্ভবত কিছু সংকলন-সময় অবলম্বন পাশাপাশি সহায়তা করবে ... এটি যদি আপনি হার্ড-কোডিং পাসওয়ার্ড হন।
SecureString
এবং এর মধ্যে রূপান্তর করার আরও একটি উপায়ও রয়েছে String
।
স্ট্রিং টু সিকিউরস্ট্রিং
SecureString theSecureString = new NetworkCredential("", "myPass").SecurePassword;
2. স্ট্রিং থেকে সিকিউরস্ট্রিং
string theString = new NetworkCredential("", theSecureString).Password;
লিঙ্কটি এখানে
SecureString
যদি আপনার কোডটি string
সুরক্ষিত করতে চান এমন মান দিয়ে কোনও বস্তু তৈরি করে তবে এটি ব্যবহার করার কোনও অর্থ নেই । SecureString
পরিচালিত মেমোরিতে স্ট্রিং থাকা এড়ানো হ'ল লক্ষ্য , যাতে কোনও আক্রমণকারী সেই মেমোরিটি পরীক্ষা করে আপনি যে মানটি আড়াল করতে চান তা স্পট করতে পারে। যে NetworkCredential
কনস্ট্রাক্টরকে আপনি কল করছেন তার জন্য স্ট্রিং দরকার, এটি যাওয়ার উপায় নয় ... অবশ্যই, আপনার কোডটি সিকিউরস্ট্রিং এবং এ থেকে রূপান্তর করার একটি সহজ উপায়, তবে এটি ব্যবহার করা আপনার কোডটিকে সাধারণ ব্যবহারের মতোই সুরক্ষিত করে তোলেstring
SecureString
কিছু লাইব্রেরির সাথে কাজ করার সময় আমাদের ব্যবহার করা দরকার । এবং এখানে সৎ হতে দিন, যদি কেউ আপনার অ্যাপ্লিকেশনটির স্মৃতি সক্রিয়ভাবে স্ক্যান করছে তবে আপনি ইতিমধ্যে হারিয়ে ফেলেছেন। এমনকি আপনি যদি সিকিউরস্ট্রিং সঠিকভাবে ব্যবহার করে থাকেন, যা আমি কখনও দেখিনি, সেখানে নিষ্কাশনের জন্য অন্যান্য মূল্যবান ডেটা থাকবে।
নীচের পদ্ধতিটি স্ট্রিংকে সুরক্ষিত স্ট্রিংয়ে রূপান্তর করতে সহায়তা করে
private SecureString ConvertToSecureString(string password)
{
if (password == null)
throw new ArgumentNullException("password");
var securePassword = new SecureString();
foreach (char c in password)
securePassword.AppendChar(c);
securePassword.MakeReadOnly();
return securePassword;
}
আপনি এটি অনুসরণ করতে পারেন:
string password = "test";
SecureString sec_pass = new SecureString();
Array.ForEach(password.ToArray(), sec_pass.AppendChar);
sec_pass.MakeReadOnly();
এখানে একটি সস্তা লিনাক ট্রিক।
SecureString sec = new SecureString();
string pwd = "abc123"; /* Not Secure! */
pwd.ToCharArray().ToList().ForEach(sec.AppendChar);
/* and now : seal the deal */
sec.MakeReadOnly();
আমি এটি এখানে ফেলে দেব। কেন?
আপনি কেবল আপনার সমস্ত স্ট্রিংগুলি সুরক্ষিত স্ট্রিংগুলিতে পরিবর্তন করতে পারবেন না এবং হঠাৎ আপনার অ্যাপ্লিকেশনটি "সুরক্ষিত" হয়ে উঠবে। সুরক্ষিত স্ট্রিংটি যতক্ষণ সম্ভব স্ট্রিংটিকে এনক্রিপ্ট করার জন্য ডিজাইন করা হয়েছে এবং খুব অল্প সময়ের জন্য ডিক্রিপ্ট করা থাকে, এটির পরে কোনও অপারেশন সঞ্চালনের পরে মেমরিটি মুছে ফেলা হয়।
আমি বিপত্তিটি বলব যে আপনার আবেদনের স্ট্রিংগুলি সুরক্ষিত করার বিষয়ে চিন্তা করার আগে আপনার কাছে কিছু নকশা স্তরের সমস্যাগুলি মোকাবেলা করতে পারে। আপনি কী করার চেষ্টা করছেন সে সম্পর্কে আমাদের আরও কিছু তথ্য দিন এবং আমরা আরও ভালভাবে সহায়তা করতে সক্ষম হতে পারি।
কোনও অভিনব লিঙ্ক নেই, হাত দিয়ে সমস্ত অক্ষর যুক্ত করা হয়নি, কেবল সহজ এবং সরল:
var str = "foo";
var sc = new SecureString();
foreach(char c in str) sc.appendChar(c);
var sc = new SecureString(); foreach(char c in "foo") sc.appendChar(c);
আমি কেবল সমস্ত লোককে এই কথাটি বলতে চাই, "এটি এর বিন্দু নয় SecureString
", যে এই প্রশ্নটি জিজ্ঞাসা করা অনেক লোকই এমন একটি অ্যাপ্লিকেশনে থাকতে পারে যেখানে, যে কারণেই হোক না কেন, ন্যায়সঙ্গত বা না হোক, তারা বিশেষত উদ্বিগ্ন নয় পাসওয়ার্ডের একটি অস্থায়ী অনুলিপি জিসি-সক্ষম স্ট্রিং হিসাবে গাদা হয়ে বসে থাকে তবে তাদের এমন একটি API ব্যবহার করতে হবে যা কেবলমাত্রSecureString
বস্তু গ্রহণ করে। সুতরাং, আপনার কাছে এমন একটি অ্যাপ্লিকেশন রয়েছে যেখানে আপনার যত্ন নেইপাসওয়ার্ডটি স্তূপে রয়েছে কিনা, সম্ভবত এটি কেবলমাত্র অভ্যন্তরীণ-ব্যবহার এবং কেবলমাত্র পাসওয়ার্ড কেবল সেখানে অন্তর্নিহিত নেটওয়ার্ক প্রোটোকলগুলির দ্বারা প্রয়োজনীয় কারণ রয়েছে এবং আপনি দেখতে পাচ্ছেন যে পাসওয়ার্ডটি যেখানে সঞ্চিত আছে সেগুলি যেমন কোনও দূরবর্তী পাওয়ারশেল সেট আপ করতে ব্যবহার করা যায় না রানস্পেস - তবে তৈরি করতে কোনও সহজ, সোজা-সরাসরি ওয়ান-লাইনার নেইSecureString
যা তোমার চাই. এটি একটি সামান্য অসুবিধা - তবে সত্যিকারের যে অ্যাপ্লিকেশনগুলির প্রয়োজন হয় তা লেখকদের ব্যবহার বা মধ্যস্থতাকারীদের প্ররোচিত না করে তা নিশ্চিত করার পক্ষে এটি সম্ভবত মূল্যবান । :-)SecureString
System.String
System.Char[]
আপনি যদি একটি রূপান্তর কম্প্রেস করতে চান তাহলে string
একটি থেকে SecureString
একটি মধ্যে LINQ
বিবৃতি নিম্নরূপঃ আপনি এটা প্রকাশ করতে পারেন:
var plain = "The quick brown fox jumps over the lazy dog";
var secure = plain
.ToCharArray()
.Aggregate( new SecureString()
, (s, c) => { s.AppendChar(c); return s; }
, (s) => { s.MakeReadOnly(); return s; }
);
তবে, মনে রাখবেন যে ব্যবহারটি LINQ
এই সমাধানের সুরক্ষা উন্নত করে না। এটা তোলে থেকে কোন রূপান্তর হিসাবে একই ত্রুটি ভুগছেন string
করতে SecureString
। যতক্ষণ string
না স্মৃতিতে আসল থাকে ততক্ষণ ডেটা দুর্বল থাকে।
বলা হচ্ছে, উপরোক্ত বিবৃতিটি যা দিতে পারে তা হ'ল এটি তৈরির বিষয়টি SecureString
, ডেটা দিয়ে এর সূচনা এবং অবশেষে এটি পরিবর্তন থেকে লক করা।
নিম্নলিখিত 2 এক্সটেনশনের কৌশলটি করা উচিত:
একটি char
অ্যারের জন্য
public static SecureString ToSecureString(this char[] _self)
{
SecureString knox = new SecureString();
foreach (char c in _self)
{
knox.AppendChar(c);
}
return knox;
}
এবং জন্য string
public static SecureString ToSecureString(this string _self)
{
SecureString knox = new SecureString();
char[] chars = _self.ToCharArray();
foreach (char c in chars)
{
knox.AppendChar(c);
}
return knox;
}
সুপারিশের জন্য জন ডাগকে ধন্যবাদ AppendChar
।
আপনি এই সহজ স্ক্রিপ্ট ব্যবহার করতে পারেন
private SecureString SecureStringConverter(string pass)
{
SecureString ret = new SecureString();
foreach (char chr in pass.ToCharArray())
ret.AppendChar(chr);
return ret;
}
12345
... এই ধরণের কোনও বোকা তার লাগেজের উপরে রাখে!"