با استفاده از تابع AES_DECRYPT در MySQL و کلید 'secret_key'، رکوردهای جدول users را طوری بازگردانید که فقط نام و ایمیل کاربرانی نمایش داده شود که مقدار ستون encrypted_password پس از رمزگشایی برابر 'Pa$$w0rd' است

4.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:20

0.0

برای حل این مسئله از تابع AES_DECRYPT برای رمزگشایی مقدار ستون encrypted_password استفاده کنید و خروجی بایت را با CAST یا CONVERT به رشته تبدیل کنید، سپس در شرط WHERE مقدار رمزگشده را با 'Pa$$w0rd' مقایسه کنید؛ نمونه عبارت: SELECT name, email FROM users WHERE CAST(AES_DECRYPT(encrypted_password, 'secret_key') AS CHAR) = 'Pa$$w0rd'. توجه کنید که AES_DECRYPT ممکن است NULL برگرداند اگر کلید نادرست باشد یا داده معتبر نباشد. از قرار دادن کلید در کد منبع خودداری کنید و به‌خاطر داشته باشید که مقایسه روی مقدار رمزگشده قابل ایندکس نیست و ممکن است از نظر عملکرد هزینه‌بر باشد.

توسط پژوهشگر در 220 روز قبل ساعت 02:20
دسته بندی ها: MySQL MySQL for beginner
sara در 220 روز قبل ساعت 10:03

این روش کار می‌کند اما از نظر امنیتی مطلوب نیست چون رمزهای بازگشت‌پذیر می‌توانند به راحتی به خطر بیفتند. به‌جای مقایسه مقدار رمزگشوده‌شده، بهتر است پسوردها را با hashing غیرقابل بازگشت مانند Argon2 یا BCrypt ذخیره کنید و برای اعتبارسنجی از هش استفاده کنید. همچنین کلید رمزگذاری را در کد منبع نگهداری نکنید و از روش‌های امن مثل Vault یا متغیرهای محیطی برای مدیریت کلید استفاده کنید. فراموش نکنید AES_DECRYPT ممکن است NULL بدهد و فیلتر WHERE روی داده رمزگشوده قابلیت ایندکس‌سازی ندارد، که کارایی را کاهش می‌دهد.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری