در این نوع الگوریتم ها کلیدی ایجاد نمیشه بلکه یک متن ورودی از کاربر گرفته میشه و در نهایت با توجه به سایز مورد نظر؛ یک متن یکتا و اصطلاحا یونیک ساخته میشه که دیگه نمیشه از متن تولید شده به متن اولیه رسید و لذا کاملا یکطرفه و غیر قابل بازگشت هست. پرکاربرد ترین استفاده از این الگوریتم هم ذخیره سازی پسورد هش شده کاربرها در سمت سرور یا کلاینت هست(لینک گیت هاب پروژه و لینک مقاله اصلی).
بریم سراغ پیاده سازی ...
ما از الگوریتم SHA برای تولید متن هش استفاده میکنیم. سایز مد نظر ما ۲۵۶ هست که در نهایت extension function زیر کار تولید متن هش رو برای ما انجام میده:
fun String.sha256(): ByteArray { val digest = MessageDigest.getInstance("SHA-256") return digest.digest(this.toByteArray()) }
حالا این متن هش شده به چه کاری میاد؟ سوال خوبیه .. بیایید یه مثال کاربردی بزنیم ..
فرض کنید که شما در کلاینت از کاربر پسورد رو میگیرید و اون رو میخوایید ذخیره کنید. حالا اگر متن خام رو ذخیره کنید که یک لقمه چرب و نرم برای هکرها هستید. چاره چیه ؟ ما میتونیم پسورد هش شده رو سمت کلاینت ذخیره کنیم. حالا وقتی کاربر پسورد خام رو وارد میکنه ما میتونیم اون رو هش کنیم و با متن هش ذخیره شده مقایسه کنیم و به این صورت از درست بودن پسورد وارد شده از سمت کاربر مطمن بشیم. البته این نکته رو یاداوری کنم که ذخیره پسورد هش شده سمت سرور روش مرسومی هست.
حالا طبق صحبت های بالا کد زیر رو برای چک کردن متن پسورد وارد شده توسط کاربر میتونید استفاده کنید:
fun verifyHashedMessage(plainData: String, hashedData: ByteArray): Boolean { return hashedData.contentEquals(plainData.sha256()) }
در این مقاله هم سعی کردم که بحث الگوریتم های رمزنگاری غیر قابل بازگشت رو هم بصورت کاربردی و همراه با کد برای شما عزیزان توضیح بدم. امیدوارم که براتون مفید بوده باشه. منتظر نظرات و فیدبک های شما هستم.