من یک ویدئو را دیدم که می تواند یک برنامه ساده هش نمکی را در C # در اینجا بنویسد. در زیر کدی که آنها نوشتند (برای برنامه های کنسول کمی ویرایش شده است):
با استفاده از System؛
با استفاده از System.Text؛
با استفاده از System.Securance.Cryptography؛
فضای نام MyApplication
{
برنامه کلاس
{
const int SALT_SIZE = 10؛
اعتبار ساکن اصلی اصلی (رشته [] استدلال می کند)
{
رشته نمک = CreateSalt ()؛
کلمه عبور رشته = "safePassword"؛
string hashedPassword = GenerateSHA256Hash (رمز عبور ، نمک)؛
Console.WriteLine ("نمک:" + نمک)؛
Console.WriteLine ("hashedPassword:" + hashedPassword)؛
}
رشته استاتیک خصوصی CreatSalt ()
{
var rng = RNGCryptoServiceProvider ()؛
var buffer = بایت جدید [SALT_SIZE]؛
rng.GetBytes (بافر)؛
بازگشت Convert.ToBase64String (بافر)؛
}
رشته استاتیک خصوصی GenerateSHA256Hash (ورودی رشته ، نمک رشته)
{
بایت [] بایت = رمزگذاری.UTF8.GetBytes (ورودی + نمک)؛
var hashManager = SHA256Managed ()؛
بایت [] hash = hashManager.ComputeHash (بایت)؛
بازگشت ByteArrayToHexString (هش)؛
}
رشته های استاتیک خصوصی بایتArrayToHexString (بایت [] بایت)
{
StringBuilder sb = StringBuilder جدید (بایت. طول * 2)؛
foreach (بایت ب در بایت)
sb.AppendFormat ("{0: x2،" ، b)؛
Return sb.ToString ()؛
}
}
}
از آنچه من به صورت آنلاین خوانده ام ، هش های شور یکی از مطمئن ترین راه های ذخیره رمزهای عبور هستند. با این حال ، من چند سوال دارم:
-
من خوانده ام که یک بار رمز عبور نمکی یک بار هش کافی نیست. شما باید هزاران بار آن را آزار دهید تا زورگیری های سخت تر برای مهاجمین دشوار شود.
آیا انجام کاری مانند زیر امن تر خواهد بود ، و چه تعداد بارها برای تکرار هذیان چه خواهد بود؟
var hash = hashManager . ComputeHash (بایت)؛ برای (int i = 0؛ i <10000؛ i ++) hash = hashManager. ComputeHash (هش)؛من همچنین خوانده ام که شما همچنین باید دوباره نمک را نمک اضافه کنید ، اما نمی دانم چگونه به درستی آن را اضافه کنید.
-
برای نمک
اندازهاندازه بافر ، 10 مورد خوب است. شماره را استفاده کنید ، یا تعداد بالاتر / پایین تر ایمن تر خواهد بود (به عنوان مثال 16)؟ -
من این را با یک دانه نمک مصرف می کنم ، اما من خوانده ام که SHA256 دیگر انتخاب مطمئن نیست زیرا خیلی هم هست
آیا این بدان معنی است که الگوریتم های سریع مانند SHA منسوخ شده اند و باید با الگوریتم های کندتر مانند
bcryptجایگزین شوند؟ -
راه مطمئن برای ذخیره هش های شور. آیا این صحیح است؟
-
پس از اعمال همه تغییرات از سؤالات فوق (در صورت وجود) ، آیا کد فوق به اندازه کافی ایمن است تا در یک تولید از آن استفاده کند؟