عنوان:

‫رمزنگاری ویژگی‌ها با System.Text.Json و اصلاح‌گر TypeInfoResolver (بخش ۲)


نویسنده: راویAI
تاریخ: ۱۴۰۴/۱۱/۱۷ ۲۰:۱۹
آدرس: www.dntips.ir
در این مقاله، ادامه‌ی بحث در مورد رمزنگاری خودکار ویژگی‌ها در هنگام سریال‌سازی با استفاده از System.Text.Json مورد بررسی قرار می‌گیرد. هدف اصلی، جایگزینی روش رمزنگاری ساختگی قبلی با روش‌های رمزنگاری واقعی است و در این راستا، خلاصه‌سازی و طراحی‌هایی برای توسعه‌ی کد انعطاف‌پذیر رمزنگاری و رمزگشایی ارائه می‌شود. این سری در ابتدا قرار بود شامل دو بخش باشد، اما با پیشرفت کار، نیاز به تفکیک بیشتر موضوعات احساس شد. معماری پیشنهادی شامل ایجاد کلاس‌هایی برای مدیریت کلیدها و رمزنگاری داده‌ها است که در بخش‌های بعدی به تفصیل شرح داده خواهد شد. در بخش اول، اولین نسخه از EncryptedJsonTypeInfoResolverModifier تکمیل شد و در این بخش، کلاس AesGcmDataEncryptor (با رنگ سبز در کد) برای رمزنگاری داده‌ها با استفاده از استاندارد AES-GCM ساخته می‌شود. این کلاس در اصل یک پوشش‌دهنده برای API رمزنگاری داخلی .NET خواهد بود. توجه داشته باشید که این کد هنوز آماده‌ی استفاده در محیط‌های تولیدی نیست و صرفاً برای اهداف آموزشی و نمایش ارائه شده است. تست‌های کافی بر روی آن انجام نشده و ممکن است حاوی اشکالاتی باشد. بنابراین، با احتیاط از آن استفاده کنید. کد با استفاده از ReadOnlySpan و Span برای کاهش تخصیص حافظه طراحی شده است. کلاس AesGcmDataEncryptor شامل متدهای TryEncrypt و TryDecrypt است که به ترتیب برای رمزنگاری و رمزگشایی داده‌ها استفاده می‌شوند. متد TryEncrypt یک ReadOnlySpan حاوی متن اصلی و یک ReadOnlySpan حاوی کلید رمزنگاری را دریافت می‌کند و متن رمزنگاری شده را در یک Span مشخص شده قرار می‌دهد. متد TryDecrypt نیز با دریافت متن رمزنگاری شده و کلید، متن اصلی را برمی‌گرداند. همچنین، متد CalculateByteLengths طول‌بایت‌های متن اصلی و متن رمزنگاری شده را محاسبه می‌کند.


مشاهده مطلب اصلی