روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ کیان سلگی
how decode sha256
جامعه پی اچ پی ایجاد شده در ۲۷ دی ۱۴۰۰

سلام وقت بخیر

یک سوال در مورد بازگشایی jwt داشتم

من با استفاده از الگوریتم‌های مشخص شده تونستم که یک jwt بسازم و اون رو وارد سایت jwt کردم دیدم که اطلاعات درست هست

در قدم بعدی سعی کردم همون عبارت کد شده سه بخشی jwt رو برگردونم به حالت اول

قسمت header و paylode رو تونستم دوباره به حالت اول برگردونم اما زمانی که خواستم قسمت signature رو بازگشایی کنم تونستم اون رو تبدیل کنم به عبارت base64url اما دیگه نتونستم یک مرحله به عقب برگردم

یعنی تلاش کردم که عبارتی که با تابع hash_hmac تولید شده رو بازگشایی کنم که نشد و داخل stack over flow که سرچ کردم نوشته بود که خروجی این تابع قابل بازگشایی نیست

آیا واقعا راهی وجود نداره؟

سلام.

باید در مورد مفاهیم hash, encrypt, encode مقاله بخونید تا متوجه تفاوتشون بشید ولی بطور خلاصه هش برگشت پذیر نیست و فقط یکسویه هست. با محاسبات ریاضی میشه تولیدش کرد ولی نمیشه به اولش برگشت. برای مثال شما یک کتاب مطالب رو میتونید هش کنید و مثلا 32 کاراکتر هش اون کتاب رو بگیرید، ولی ایا میتونید از اون 32 کاراکتر به اون همه محتوا برگشت؟ خیر.

انکد، راحت با توابع مخصوص خودش دیکد میشه(هدفشم انتقال داده‌ها به سیستم‌های دیگس که با فرمت اولش نمیشه جابجاش کرد، مثلا با انکد، بایت‌های عکسو به کاراکترهای اسکی تبدیل میکنیم تا بتونیم عکسو در دیتابیس ذخیره کنیم. هدف انتقال داده است نه پنهان سازی.) و انکریپت، برای دیکریپت شدن نیاز به کلید داره.(هدف پنهان سازی داده است و همچنین برگرداندن به حالت اولش با یک کلید.)

اما هش هدفش پنهان سازی داده هست بدون برگشت پذیری و در موارد بررسی و ولیدیت کردن داده‌ها استفاده میشود مثلا یک فایل چند گیگابایتی ازش یک هش تولید میشه برای اینکه با هش فایلی که دانلود کردید مقایسه بشه که یک بیت هم جابجا نشده باشه و عینا همون فایل دانلود شده باشه... یا چک کردن پسورد و ...

محسن موحد ۲۷ دی ۱۴۰۰، ۱۸:۲۹

سلام

ممنون از پاسخگویی شما

توضیحات شما رو متوجه شدم تا حدود زیادی

اما یک سوال دیگه پیش اومد

شما فرمودید که هدف از هش کردن پنهان سازی و اعتبارسنجی داده هست

مثلا من یک رمز عبور رو به صورت هش شده در دیتابیس ذخیره کردم و برای اعتبارسنجی هم عبارتی که از کاربر میگیرم هش میکنم با همون الگوریتم و مقایسه می‌کنم

حالا بعضی از الگوریتم‌ها هستن مثل bcrypt که یک عبارت رو هر سری یک مدل هش میکنند . این الگوریتم‌ها که هر سری یک عبارت رو متفاوت هش میکنند چطور عمل اعتبارسنجی یا validation رو انجام میدن ?

کیان سلگی ۲۸ دی ۱۴۰۰، ۱۲:۱۸

با توابع مخصوص خودشون ولیدیت میشن مثلا با password_hash هش درست میکنیم و با تابع password_verify عبارت هش شده رو validate میکنیم.

بهترین پاسخ
محسن موحد ۲۸ دی ۱۴۰۰، ۱۲:۲۹