تحلیل داده
صفحه اصلی / آموزش طراحی وب / آموزش ASP.NET / بررسی encryption و decryption در ASP.Net Core

بررسی encryption و decryption در ASP.Net Core

encryption و decryption در ASP.Net Core

مقاله بررسی encryption و decryption در ASP.Net Core ،فریمورک ASP.NET Core ، برای حفاظت از داده، API جدیدی را ارئه می دهد که شامل مکانیسم هایی برای رمزگذاری و رمزگشایی است. در این مقاله به صورت گذرا و سریع با نحوه کار با این API آشنا می شویم.

تفاوت Encoding ، Encryption و Hashing چیست؟

در ابتدای کار برخی مباحث پایه ای را سریعا مرور می کنم تا بعدا در انتخابشان گیج نشده،خصوصا وقتی می خواهید رمزهای عبور ایمن را مدیریت کنید، قسمت بعدی را مطالعه کنید. مقالات مختلفی در زمینه encrypting passwords در ASP.NET را مطالعه کردم که نحوه encode و decode برمبنای ۶۴، یک رشته(string) را نشان می دادند. Encoding داده ها یک اقدام امنیتی نیست- حتی اگر خروجی برنامه برای کاربر مفهوم نباشد. Encoding داده ها، تنها از خرابی داده ها (data corruption) محافظت می کند؛ در زمانی که داده از یک مکان به مکان دیگری منتقل بشود مثل across networks.

Encryption  در یک ویژگی با encoding مشابه است؛ قابل برگشت بودن به حالت اولیه. با این حال، encryption با استفاده از یک الگوریتم رمزنگاری(cryptographic algorithm) داده ها را از یک شکل به شکل دیگر تبدیل می کند و تنها کسانی که به کلید رمزنگاری خاصی(cryptographic key) دسترسی داشته باشند می توانند داده را به فرم اولیه اش تبدیل کنند.

در نهایت نوبت به hashing می رسد که cryptography وابسته به encryption را ارائه می دهد اما یک فرآیند یک طرفه است. داده ای که به درستی مراحل hashing را سپری کرده امکان unahshed یا decoded را ندارد. معمولا Hashing برای برای ذخیره سازی امن passwordها توصیه می شود همینطور توسط تمامی فریمورک های Identity/Membership در NET. استفاده می شوند. هنگامی کاربر در یک web site ثبت نام می کند، password که انتخاب کرده hash می شود و سپس این مقدار hash شده در پایگاه داده ذخیره می شود. زمانی که کاربر log in کند password که وارد می کند hash شده و این مقدار جدید، با مقداری که در هنگام ثبت نام در پایگاه داده ذخیره شده مقایسه می شود. Hashing همیشه در برابر یک ورودی یکسان، خروجی یکسان می دهد.

encryption و decryption در ASP.Net Core

Data Protection APIs in ASP.NET Core

data protection APIs مکانیسم هایی را برای encryption  وhashing  فراهم می کنند ولی در این مقاله فقط به بحث encryption می پردازیم. Encryption  به یک کلید احتیاج دارد که این کلید توسط سیستم حفاظت از داده(data protection system) ایجاد و مدیریت می شود. کلید ها با طول عمر پیش فرض ۹۰ روز ایجاد می شوند و براساس محیط در مکانی مناسب، ذخیره می شوند. کلیدها موقتی بوده پس data protection API اساسا برای سناریوهای حفاظت از داده هایی که در کوتاه مدت نگه داری می شوند، طراحی شده اند؛ از جمله این سناریوها encryption of authentication cookies یا query string data. این API ها برای حفاظت از داده هایی که در مدت طولانی نگه داری می شوند طراحی نشده اند.

data protection system به عنوان بخشی از سرویسهای پیش فرض برای یک ASP.NET Core application فعال می شوند پس لازم نیست در متد StartUp ،کار خاصی انجام دهید مگر اینکه بخواهید محل ذخیره سازی پیش فرض هر کلید یا طول عمر پیش فرض آنها را تغییر دهید؛ برای اعمال هرکدام از این تغییرات، باید از متد توسعه یافته ConfigureDataProtection  که در متد ConfigureServices است، استفاده کنید:

public void ConfigureServices(IServiceCollection services)
{
    services.ConfigureDataProtection(dp =>
    {
        dp.PersistKeysToFileSystem(new DirectoryInfo(@"c:\keys"));
        dp.SetDefaultKeyLifetime(TimeSpan.FromDays(14));
    });
    ....

data protection system از دو مفهوم اصلی تشکیل شده است، یک data protection provider (ارائه شده توسط رابط IDataProtectionProvider) که برای ایجاد یک data protector (ارائه شده توسط رابط IDataProtector است) استفاده می شود. وظیفه data protector، encrypt و decrypt داده هاست. به دلیل اینکه data protection system به صورت پیش فرض به مجموعه سرویس های اپلیکیشن اضافه می شود پس می توان آن را به وسیله dependency injection (تزریق وابستگی) نمایش داد. در اینجا، می توانید IDataProtectionProvider را به کنترلر تزریق کرده و از آن در قسمت controller’s constructor (سازنده ی کنترلر) برای ایجاد نمونه از IDataProtector استفاده کنید:

public class HomeController : Controller
{
    IDataProtector _protector;
        
    public HomeController(IDataProtectionProvider provider)
    {
        _protector = provider.CreateProtector(GetType().FullName);
    }

متد CreateProtector  از IDataProtectionProvider یک رشته احتیاج دارد که به “purpose” string معروف است و برای ایجاد تمایز بین data protectorهای مختلف در یک اپلیکیشن استفاده می شود. داده ای که توسط یک data protector محافظت می شود نمی تواند توسط protector دیگری unprotected شود. برای اینکه با protectorها در بخش های دیگرِ سیستم تصادفی رخ ندهد باید نام کاملِ مولفه اخیر را ارسال کنید.

Encrypting Query Strings/Route Data

یکی از رایج ترین سناریوهای encryption که مشاهده کردم سوال در رابطه با encrypting identity values در query strings یا تعیین مسیر برای داده ها(برای جلوگیری از دستکاری) بود. سوال دیگر در رابطه با داده های محدود شده(restricted data) بود. در بخشی از کد زیر نحوه گرفتن داده ها از یک سرویس را نشان دادم و سپس تبدیل داده به یک view model. (در زمانی که شناسه(ID) هر آیتم برای استفاده از یک URL ، encrypt می شوند:)

public IActionResult Index()
{
    var model = _service.GetAll().Select(c => new ContractViewModel {
        Id = _protector.Protect(c.Id.ToString()),
        Name = c.Name }).ToList();
    return View(model);
}

متد Protect  یک آرایه از byteها  یا یک string گرفته و آن را encrypt می کند. مقدار encrypt  شده در view  و برای ایجاد شناسه ی یک مسیر استفاده می شود:


@foreach(var entry in Model)
{
    

<div><a asp-action="Details" asp-route-id="@entry.Id">@entry.Name</a></div>


}

لینکها به اکشنی(action) با نام Details اشاره می کنند در جایی که متد IDataProtector’s Unprotect method برای decrypt کردن شناسه و برگرداندن جزئیات هر آیتم استفاده می شود:

public IActionResult Details(string id)
{
    var contract = _service.Find(Convert.ToInt32(_protector.Unprotect(id)));
    return View(contract);
}

encryption و decryption در ASP.Net Core

وقتی روی هر از یک لینک ها کلیک شود مقادیر encrypt شده در URL قابل مشاهده هستند:

encryption و decryption در ASP.Net Core

خلاصه

این مقاله مقدمه ای بر سیستم حفاظت از داده بود که برای استفاده در ASP.NET Core application ساخته شد. سپس تفاوت بین encoding ، encryption و hashing بیان شده تا بتوانید از هرکدام از این فرآیندها(process) در جای درست استفاده کنید. سپس مفاهیم اصلی که یک سیستم encryption/decryption برپایه آن شکل می گیرد، توصیف شدند وسپس نحوه استفاده از کامپوننت ها برای انجام امن encrypt و decrypt روی داده، نشان داده شد.

برای مطالعه مستندات این مقاله به این لینک مراجعه کنید.



رمز فایل : www.mspsoft.ir , www.mspsoft.com
کانال ام اس پی سافت

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *



دوره های آنلاین ام اس پی سافت

آموزش طراحی فروشگاه اینترنتی

آموزش طراحی فروشگاه اینترنتی

طراحی سیستم مدیریت مشتریان

طراحی سیستم مدیریت مشتریان

دوره طراحی وب سایت پورتال خبری

دوره طراحی وب سایت پورتال خبری

دوره طراحی حسابداری فروشگاه

دوره طراحی حسابداری فروشگاه