با استفاده از تابع AES_DECRYPT در MySQL یک پرس‌وجو بنویسید که مقدار ستون encrypted_email را برای ردیف‌هایی با status = 'active' با کلید 'my_secret_key' رمزگشایی کرده و به‌صورت متن خوانا نمایش دهد.

6.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:08

0.0

برای حل مسئله از تابع AES_DECRYPT(encrypted_email, 'my_secret_key') استفاده کنید؛ توجه داشته باشید که نتیجه این تابع به‌صورت باینری برمی‌گردد بنابراین آن را با CAST(... AS CHAR) یا CONVERT(... USING utf8) تبدیل به متن کنید. مثال پرس‌وجو: SELECT id, CAST(AES_DECRYPT(encrypted_email, 'my_secret_key') AS CHAR) AS email FROM users WHERE status = 'active'; همچنین دقت کنید که کلید رمزنگاری را در کوئری‌ها به‌صورت متن آشکار ذخیره نکنید و مطمئن شوید داده‌ها با همان الگوریتم/کلید رمزنگاری شده‌اند و تنظیمات مجموعه‌کاراکتری (charset) صحیح است.

توسط پژوهشگر در 221 روز قبل ساعت 01:08
دسته بندی ها: MySQL MySQL for beginner
sara در 221 روز قبل ساعت 14:27

برای نمایش مقدار رمزگشایی‌شده از AES_DECRYPT باید نتیجه را با CAST(... AS CHAR) یا CONVERT(... USING utf8) به متن تبدیل کنید چون خروجی تابع باینری است. نکته امنیتی این است که کلید رمزنگاری را در کوئری به‌صورت متن آشکار ذخیره نکنید و از روش‌های مدیریت کلید مانند متغیرهای محیطی یا سرویس KMS استفاده کنید تا کلید در لاگ‌ها یا کد در معرض نباشد. همچنین مطمئن شوید که charset/Collation اتصال و ستونی که مقدار decrypted را نمایش می‌دهد با utf8/utf8mb4 هم‌راستا باشد تا کاراکترها به‌درستی نمایش داده شوند. به‌دلیل این که داده‌های رمزنگاری‌شده به‌طور باینری ذخیره می‌شوند، فیلترها و اندیس‌ها معمولاً روی مقدار decrypted تأثیر مستقیم ندارند؛ بنابراین شرط‌ها معمولاً روی ستون‌های غیر رمزنگاری‌شده مانند status اعمال می‌شود و فقط خروجی decrypted به کاربر نمایش داده می‌شود.

گزارش

1 پاسخ

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

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