سلام به همه
هش (Hash) یه پروسه یک سویه است و داده هش شده رو نمیشه آن-هش کرد! الگوریتم هش جوریه که به ازای یه ورودی مشخص یه خروجی منحصر بفرد مشخص میده؛ حالا برای استفاده از خروجی حتما باید یه مقدار رو دوباره به الگوریتم داد و خروجی دوم را با خروجی اصلی مقایسه کرد که اگه درست بود پس حتما ورودی ها هم یکی بودند. (البته میدونم که اساتید با این مفاهیم آشنا هستند، فقط برای اطلاع دوستان تازه کار خدمتتون عرض کردم.)
پس دقیقا بنا بر سفارش دوست خوبمون آقا مجید، قبل از ارسال در شبکه (برای جلوگیری از استراغ سمع) یا قبل از ذخیره در فایل یا پایگاه داده بهتره رشته های امنیتی مثل رمز عبور هش بشند، تا حتی به قول شما اگه کسی بدست بیاره مقدار هش شده رو نمیتونه ازش استفاده ای کنه!
پس شما اصلا نگران لو رفتن الگوریتم هش نباش!
اصلا صفحه اول سایتتون با جرأت بنویسین که هکر محترم من رمز عبور را با الگوریتم فلان هش کردم! چون مقدار هش شده یه مقدار غیرقابل استفاده است!
بنده خودم از هش الگوریتم SHA1 از نیم اسپیس کریپتوگرافی (System.Security.Cryptography) استفاده میکنم. از کلاس اس اچ ای 1 یه نمونه درست کنین، بعد رشته مورد نظر رو به آرایه بایت تبدیل کنین و این آرایه بایت رو به عنوان ورودی به متد کامپیوت اون نمونه ای که ساختین بدین و خروجی بدست اومده میشه مقدار هش شده مورد نظر:
System.Security.Cryptography.SHA1 passHash = new System.Security.Cryptography.SHA1Managed();
byte[] result = passHash.ComputeHash(passBytes);
در انتها بایت بایت خروجی ها رو باهم مقایسه کنیم و در صورت هر گونه عدم تساوی، مقدار رو رد می کنیم.