یک تابع یا ماژول JavaScript بنویسید که یک رشته ورودی را با استفاده از رمزنگاری AES-GCM مبتنی بر یک رمزعبور (password) رمزگذاری کند و سپس بتواند با همان رمزعبور آن را بازگشایی (decrypt) نموده و متن اصلی را بازگرداند.

5.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:11

0.0

برای حل این مسئله می‌توانید از Web Crypto API (SubtleCrypto) در JavaScript استفاده کنید: ابتدا از PBKDF2 برای مشتق‌سازی یک کلید از رمزعبور استفاده کنید (با سِلت و تعداد تکرار مناسب)، سپس یک IV تصادفی بسازید و با AES-GCM متن را رمز کنید؛ خروجی بایت‌‌ها را به Base64 یا hex تبدیل کنید و IV را همراه با متن رمزنگاری‌شده ذخیره کنید تا برای رمزگشایی استفاده شود. نکات: از TextEncoder/TextDecoder برای تبدیل رشته به ArrayBuffer و برعکس استفاده کنید، توابع SubtleCrypto همگی async هستند پس از async/await یا Promiseها بهره ببرید، IV و salt را هر بار تصادفی بسازید و آن‌ها را ذخیره کنید اما کلید/رمزعبور را در کد هاردکُد نکنید و برای تست، یک رشته ساده را رمز و سپس بازگشایی کنید تا مطمئن شوید خروجی با ورودی برابر است.

توسط پژوهشگر در 201 روز قبل ساعت 03:11
دسته بندی ها: JavaScript JavaScript for beginner
arash در 201 روز قبل ساعت 07:16

نکته: استفاده از PBKDF2 با salt تصادفی و تعداد تکرار مناسب (مثلاً 100000 یا بیشتر) برای مشتق کلید از پسورد امنی بهتر فراهم می‌کند و AES-GCM با IV تصادفی امانت داده‌ها را تضمین می‌کند. هر رمزگذاری، IV و salt باید به خروجی رمزنگاری‌شده پیوست شوند تا بتوان گشایش کرد و از Integrity Tag در AES-GCM استفاده گردد. توابع Web Crypto API ناهمگام هستند، پس از async/await استفاده کنید و با TextEncoder/TextDecoder رشته‌ها را به ArrayBuffer تبدیل کنید. در محیط تست، پسورد و رشته ساده را اجرا کنید تا مطمئن شوید که دیکد می‌شود؛ اما در تولید، پسورد را در کد هاردکد نکنید و از ورودی کاربر استفاده کنید.

گزارش

1 پاسخ

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

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