آموزش پیشرفته EOS – قسمت اول: هش‌های کریپتوگرافیک

هش‌ها رشته کاراکترهایی هستند که ورودی‌های گوناگون را به رشته‌کاراکترهای معکوس‌ناپذیر تبدیل می‌کنند. از هش‌ها برای سنجش اصالت استفاده می‌شود. در مقاله زیر، ساخت متدی برای تولید هش در EOS را بررسی خواهیم کرد.

0 156

به مجموعه آموزش پیشرفته توسعه EOS خوش آمدید. در اینجا در مورد تکنیک‌ها و کاربردهایی صحبت می‌کنیم که به ندرت در آموزش‌ها و دروس در مورد آن‌ها صحبت می‌شود. هدف این مجموعه کنار هم جمع کردن مطالبی است که شما برای تکمیل توانایی‌های خود به عنوان یک توسعه‌دهنده اپلیکیشن در شبکه EOS به آن نیاز دارید.

از آن‌جایی که این مباحث پیشرفته هستند، فرض را بر این می‌گذاریم که شما مقدمات را می‌دانید و به دنبال بهبود دانش خود هستید. به همین دلیل، کد‌هایی که در این مقاله مورد استفاده قرار می‌گیرند مختص موضوع بحث خواهند بود.

تابع هش کریپتوگرافیک

بیایید تا با بررسی هش‌ها شروع کنیم، تمام منابع این مثال در GitHub قابل دسترسی هستند. در رمزنگاری، یک الگوریتم هشینگ یک ورودی دریافت کرده و ملغمه‌ای با اندازه ثابت تولید می‌کند که به آن خروجی خلاصه می‌گویند. این خلاصه قطعی و معکوس‌ناپذیر است، یعنی این ورودی همیشه همین خروجی را به دست خواهد داد اما نمی‌توان خروجی را معکوس کرده و به ورودی رسید. یک الگوریتم هشینگ خوب تلاقی خروجی را با استفاده از «میزان بالای سختی» در کوتاه‌ترین زمان محاسباتی به حداقل می‌رساند. تلاقی یا برخورد، احتمال تولید یک خروجی از دو ورودی متفاوت است.

کاربرد هش‌ها

به طور معمول ما از تابع هش برای اصالت‌سنجی و شاخص‌گذاری داده استفاده می‌کنیم. من آن را به عنوان روشی برای فشرده‌سازی انحصار به فرد در نظر می‌گیرم. برای مثال، مقایسه دو فایل با سایز دلخواه یا ایمیل کاربران زمان‌بر بوده و داده‌های آسیب‌پذیر کاربران افشا می‌کند. می‌توانیم در عوض با هش کردن محتویات فایل یا ایمیل کاربران یک اثرانگشت ایجاد کنیم و با کارایی بیشتری با استفاده از نتایج هش داده‌ها را مقایسه کنیم.

این همه چیزی است که در اینجا باید بدانیم، اما اگر هنوز هم کنجکاو هستید، توصیه می‌کنم در گوگل بگردید یا نگاهی به مقاله Blockgeeks در مورد زیر و روی توابع هش نگاهی بیاندازید.

کدنویسی تابع هش

حال که به درکی ابتدایی از هش رسیده‌ایم، می‌توانیم تلاش کنیم تا هش خود را در قرارداد هوشمند EOS تولید کنیم. ما اقدامی خواهیم ساخت که یک رشته ورودی را گرفته و یک خلاصه checksum256hash خارج می‌کند، و برای نمونه حاضر، نتیجه را چاپ می‌کند.

بیایید با مشمول کردن کتابخانه crypto.h و لفاف EOS print.h از چارچوب EOS شروع کنیم.

<include <eosiolib/crypto.h

آیا اکستنشن .h را در نام فایل crypto.h می‌بینید؟ این به این معنا است که از یک کتابخانه C و نه C++ استفاده می‌کنیم، پس متدهای ما انتظار ورودی‌های نوع C را خواهند داشت.

حال می‌توانیم اقدام خود را تعریف کرده و به checksum256output خود یک مرجع اختصاص دهیم.

;{}checksum256 sum

چارچوب EOS مجموعه‌ای از متدها را برای الگوریتم‌های هشینگ مختلف در اختیار می‌گذارد. در این مثال از sha256 استفاده می‌کنیم، چرا که سریع و امن است و عموما مورد استفاده قرار می‌گیرد.

;(sha256(const_cast<char*>(str.c_str()), str.size(), &sum

متد sha256 انتظار ورودی‌های نوع C را دارد، پس ما باید اول رشته خود را به یک مجموعه char تبدیل کنیم، سپس اندازه رشته و یک checksum256reference را کنترل کنیم که با خلاصه خروجی به‌روزرسانی می‌گردد. حال تنها کاری که باید انجام دهیم چاپ نتیجه هش شده است.

;((printhex(&sum, sizeof(sum

در اینجا می‌توانستیم checksum256 را بازگردانیم و از آن به عنوان یک اقدام داخلی خصوصی استفاده کنیم.

یک قدم جلوتر – تبدیل Checksum به رشته

این پیاده‌سازی نتیجه زحمات میگل موتا (Miguel Mota) است که راهکاری را برای تبدیل checksum256 به یک رشته پایه ۱۶ توسعه داده است.

چه می‌شود اگر بخواهیم خلاصه خود را به یک رشته برگردانیم. برای این کار به یک متد جدید احتیاج خواهیم داشت. برای شروع بیایید برای آرگومان ورودی خود الگویی بسازیم و خود متد را تعریف کنیم. این الگو در خارج از تعریف متد ما تعریف شده است که به طور معمول در بالای فایل قرار دارد. الگوها به ما اجازه می‌دهند تا نوع متغیر را در زمان احضار تابع تعریف کنیم، سپس کامپایلر تعویض را صورت داده و عملیات را انجام می‌دهد.

 

حال می‌توانیم کار بر روی متن کد را شروع کنیم. برای شروع، برای نتیجه خود یک رشته می‌سازیم، یک مجموعه char که حروف از میان آن‌ها انتخاب خواهند شد، و داده‌های خود را نیز به شکل uint8_t تعریف می‌‌کنیم.

 

در نهایت، این کار را برای هریک از کاراکترهای داده‌های ورودی تکرار کرده، کاراکتر شانزده‌‌شانزدهی متناظر را تطبیق داده و آن را به رشته نتیجه خود اضافه می‌کنیم.

 

بسیار خب، همین بود! حال متدی برای تولید یک checksum256 از یک مجموعه char و متدی برای تبدیل checksum256 به یک رشته داریم. در مقاله بعدی به singletonها خواهیم پرداخت و می‌بینیم که چطور می‌توانیم از آن‌ها برای ذخیره وضعیت اپلیکیشن و تنظیمات استفاده کنیم.

منبع: Medium.com

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد.