خانه - بهبود
رمزهای جریانی عملیات XOR و رمزگذاری ساده فایل نمونه ای از نحوه عملکرد XOR

مفاهیم اساسی رمزگذاری

رمزگذاری- روشی برای تبدیل اطلاعات باز به اطلاعات بسته و بالعکس. برای ذخیره اطلاعات مهم در منابع غیر قابل اعتماد یا انتقال آن از طریق کانال های ارتباطی ناامن استفاده می شود. طبق GOST 28147-89، رمزگذاری به فرآیند رمزگذاری و رمزگشایی تقسیم می شود.

رمز, کد- مجموعه ای از الگوریتم های تبدیل رمزنگاری (رمزگذاری) که مجموعه داده های باز ممکن را به مجموعه داده های رمزگذاری شده ممکن و تبدیل های معکوس آنها ترسیم می کند.

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

رمزنگاری- علم روشهای اطمینان از محرمانه بودن (عدم امکان خواندن اطلاعات توسط افراد خارجی) و صحت (صداقت و صحت تألیف و همچنین عدم امکان امتناع از تألیف) اطلاعات.

در ابتدا، رمزنگاری روش‌های رمزگذاری اطلاعات را مورد مطالعه قرار داد - تبدیل برگشت‌پذیر متن ساده (اصلی) بر اساس یک الگوریتم مخفی و/یا کلید به متن رمزی (متن رمز). رمزنگاری سنتی شاخه ای از سیستم های رمزنگاری متقارن را تشکیل می دهد که در آن رمزگذاری و رمزگشایی با استفاده از کلید مخفی یکسان انجام می شود.

رمزنگاری یکی از قدیمی ترین علوم است که تاریخچه آن به چندین هزار سال قبل باز می گردد.

متن (منبع) را باز کنید- داده ها (نه لزوماً متن) بدون استفاده از رمزنگاری منتقل می شوند.

متن رمزگذاری شده (بسته)- داده های به دست آمده پس از استفاده از سیستم رمزنگاری با کلید مشخص شده.

سیستم رمزگذاری- خانواده ای از تبدیل برگشت پذیر متن ساده به متن رمزی.

کلید- یک پارامتر رمزی که انتخاب یک تبدیل خاص یک متن داده شده را تعیین می کند. در رمزهای مدرن الگوریتم رمزگذاریشناخته شده است، و قدرت رمزنگاری رمز کاملاً توسط محرمانه بودن کلید تعیین می شود (اصل کرخوف).



رمزگذاری- فرآیند اعمال تبدیل رمزنگاری متن ساده بر اساس یک الگوریتم و یک کلید و در نتیجه متن رمزی.

رمزگشایی- فرآیند استفاده عادی از تبدیل رمزنگاری متن رمز به متن ساده.

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

رمزنگاری- علمی که روش های ریاضی برای نقض محرمانه بودن و یکپارچگی اطلاعات را مطالعه می کند.

حمله رمزنگاری- تلاش یک تحلیلگر رمزنگاری برای ایجاد انحراف در سیستم تبادل اطلاعات امن مورد حمله. یک حمله رمزنگاری موفق نامیده می شود شکستنیا افتتاح.

قدرت رمزنگاری- توانایی یک الگوریتم رمزنگاری برای مقاومت در برابر تحلیل رمز.


الگوریتم رمزگذاری XOR

شاید ساده ترین و ابتدایی ترین الگوریتم رمزگذاری رمزگذاری XOR باشد. الگوریتم رمزگذاری XOR را می توان با برخی روش ها پیچیده کرد که می تواند به نتایج بسیار خوبی دست یابد. اما در پیاده سازی اساسی خود الگوریتم بسیار ناپایدار است.

الگوریتم رمزگذاری XOR مبتنی بر استفاده از عملیات منطقی باینری منحصر به فرد یا است. در نمای جدول، تابع به شکل زیر است:

آ ب آکسور بی

ورودی الگوریتم متن منبع (به طور کلی، هر مجموعه ای از بایت ها، به عنوان مثال، یک فایل دلخواه) و یک رشته رمز عبور است.

ایده الگوریتم این است که یک عملیات XOR منطقی بیتی برای هر کاراکتر متن منبع و کاراکتر بعدی رشته رمز عبور اعمال می شود. نتیجه در یک فایل نوشته می شود.

عملیات XOR متقارن است. به این معنی که اگر یک فایل را 2 بار با رمز عبور یکسان رمزگذاری کنید، خروجی خود این فایل بدون تغییر خواهد بود. از این واقعیت مشخص می شود که از همان تابع برای رمزگذاری و رمزگشایی استفاده می شود که اجرای الگوریتم را بسیار ساده می کند. علاوه بر این، اگر در هنگام رمزگشایی از رمز عبور مشابهی مانند رمزگذاری استفاده شود، خروجی فایل اصلی خواهد بود. اگر رمزهای عبور متفاوت باشد، خروجی فایلی خواهد بود که حاوی داده های نادرست است.

بیایید به الگوریتم رمزگذاری XOR با جزئیات بیشتری نگاه کنیم:

  1. در ورودی ما نشانگرهای منبع و فایل های حاصل و یک رشته رمز عبور (که نباید خالی باشد) دریافت می کنیم.
  2. کاراکتر بعدی (بایت) را از فایل منبع می خوانیم.
  3. عملیات XOR را روی بایت خوانده شده و کاراکتر رمز عبور بعدی اعمال کنید.
  4. نتیجه عملیات در فایل حاصل نوشته می شود.
  5. اگر به انتهای فایل منبع نرسیده اید، به مرحله 2 بروید.

اگر رمز عبور کوتاه‌تر از فایل اصلی باشد (و در اکثر موارد اینطور خواهد بود)، پس رمز عبور به صورت دوره‌ای استفاده می‌شود، یعنی. پس از آخرین کاراکتر رمز عبور، به اولین کاراکتر باز می گردیم.

اجرای این روش ضروری است:

رویه XOR_CoDec (const SourceFile، DestFile، Password: string)؛

جایی که موارد زیر به عنوان پارامتر ارسال می شوند:

SourceFile - نام فایل منبع.

DestFile – نام فایل حاصل.

عملیات دودویی XOR (مخفف eXclusive OR) یک عملوند باینری (مانند AND، OR و غیره) از جبر بول است. این عملوند دو بیت را با هم مقایسه می کند و در ازای آن یک بیت تولید می کند. اگر دو بیت مقایسه شده با هم متفاوت باشند، آن بیت برابر با 1 و اگر برابر باشند 0 خواهد بود. رمزگذاری Xor معمولاً در چندین رمز متقارن (به ویژه AES) استفاده می شود. رمز متقارن به سادگی رمزی است که در آن از کلید برای فرآیند رمزگذاری و رمزگشایی استفاده می شود. عملوند XOR برای هر بیت بین متنی که می‌خواهید رمزگذاری کنید و کلیدی که انتخاب می‌کنید اعمال می‌شود. مثال‌ها بهتر از کلمات هستند، بیایید کلمه "xor" را انتخاب کنیم. ما می خواهیم آن را با کلید "cle" رمزگذاری کنیم. ابتدا باید ورودی و کلید را در نمایش باینری تبدیل کنیم:

سپس هر بیت را با عملوند XOR مقایسه می کنیم. که به شما این را می دهد:

Xor: 01111000 01101111 01110010
cle: 01100011 01101100 01100101
00011011 00000011 00010111

اگر بخواهیم به ورودی اصلی ("xor") برگردیم، فقط باید XOR را بین خروجی و کلید دوباره اعمال کنیم. می توانید توجه داشته باشید که XOR یک تابع جابجایی به عنوان ضرب است. حالا اگر کلید کوچکتر از ورودی باشد چه کنیم؟ این مورد در اکثر موقعیت ها وجود دارد. اگر طول کلید با ورودی یکسان بود، جالب نبود زیرا باید کلید را به شخصی که می‌خواهید ورودی را بخواند، ارسال کنید، در مقابل، وقتی کلید و ورودی دارای طول یکسانی باشند، برای کسی غیرممکن است که رمز را بشکند. بنابراین، وقتی کلید کوچکتر از ورودی است، فقط آن را دوباره اعمال کنید تا به انتهای ورودی برسید. اگر به عنوان مثال می خواستم کلمه "bonjour" را با کلید خود "cle" رمزگذاری کنم. ، من این کار را به این صورت انجام می دهم:

Bonjour: 01100010 01101111 01101110 01101010 01101111 01110101 01110010
cleclec: 01100011 01101100 01100101 01100011 01101100 01100101 01100011

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

یک رمز جریان عملیاتی را روی بیت ها یا کاراکترها انجام می دهد (مانند 8، 16 یا 32 بیت). یک رمز جریان یک کاراکتر متن ساده را به نویسه‌های متن رمزی متفاوت تبدیل می‌کند، برای مثال بسته به تعداد و کدام کاراکترهایی که قبلاً پردازش شده‌اند.

رمزگذاری Xor

در بسیاری از رمزهای جریانی، رمزگذاری به صورت زیر انجام می شود. مولد اعداد شبه تصادفی دنباله ای از بیت ها (گاما) تولید می کند. این گاما با استفاده از عملیات XOR بیتی به متن ساده اعمال می شود. نتیجه یک متن رمزی است. برای رمزگشایی، باید دقیقاً همان روش را انجام دهید، فقط گامای به دست آمده با استفاده از یک ژنراتور یکسان با همان حالت اولیه را روی متن رمز اعمال کنید.

بیایید ایده این ساده ترین روش را در نظر بگیریم. همانطور که از جبر بولی مشخص است، عملیات جمع منطقی "⊕" مدول 2 (یا انحصاری منطقی OR - XOR، eXclusive OR) دارای معنای زیر است:

جدول حقیقت برای XOR:

ایکسمن ⊕ yمن

ایکس = 10011 101

y= 01001 100

z= 11010 001

یعنی عملیات z= ایکسyاساساً به صورت بیتی (بیتی - نتیجه به بیت های همسایه بستگی ندارد). اگر فقط یکی از بیت های مربوطه 1 باشد، نتیجه 1 است. و اگر هر دو 0 یا هر دو 1 باشند، نتیجه 0 خواهد بود. اگر به نتیجه اعمال دقت کنید. XORبه دو عدد باینری، سپس می‌بینید که می‌توانیم یکی از عبارت‌ها را با استفاده از دومی بازیابی کنیم: ایکس= zyیا y= zایکس.

از این می توان نتیجه گیری های زیر را گرفت: دانستن عدد yو اعمال کردن XORبه ایکس، خواهیم گرفت z. سپس، ما، دوباره با استفاده از y، ما از zشماره پشت ایکس. به این ترتیب می توانیم دنباله اعداد را تبدیل کنیم ( ایکس) منبه دنباله ( z) من. حالا می توانیم شماره را نام ببریم yکلید رمزگذاری (یا رمزگذاری). اگر شخصی کلید را نداند، نمی تواند دنباله اصلی اعداد را بازیابی کند ( ایکس) من. اما اگر ( ایکس) مننمایش بایتی از حروف متن است، سپس یک کاربر با تجربه قادر خواهد بود متن رمزگذاری شده را کرک کند. از آنجایی که هر حرف در متن رمزی با همان کد نشان داده می شود z، سپس با استفاده از فرهنگ لغت فرکانس، مهاجم قادر خواهد بود کلید رمزگذاری را محاسبه کند y، اگر متن رمزی به اندازه کافی طولانی در اختیار داشته باشد.

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

بنابراین، استحکام الگوریتم تنها به ویژگی های گامای تولید شده توسط ژنراتور بستگی دارد. اگر گاما فقط از صفر تشکیل شده باشد (مورد منحط)، در این صورت داده ها در طول رمزگذاری به هیچ وجه تغییر نمی کنند. اگر گاما دوره کوتاهی داشته باشد (مثلاً 32 بیت)، رمزگذاری به یک عملیات XOR با یک ثابت 32 بیتی کاهش می یابد. اگر گاما مجموعه‌ای تصادفی از بیت‌ها باشد که از هیچ الگوی پیروی نمی‌کند، نتیجه یک آنالوگ از یک پد رمزگذاری یکبار مصرف است که محافظت مطلق را فراهم می‌کند. البته، الگوریتم قطعی مورد استفاده در مولد گاما نمی تواند یک توالی واقعا تصادفی ایجاد کند. اگر دنباله قابل تکرار نباشد، پیام رمزگشایی نخواهد شد.

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

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

طبق تعریف، یک عملیات OR انحصاری دو بیتی، اقدامات نشان داده شده در جدول را انجام می دهد. 19.1.

جدول 19.1. انحصاری OR (XOY)

ورودی 1

ورودی 2

خارج شوید

همچنین می توان آن را "عملیات عدم تطابق" نامید - خروجی زمانی منطقی است که مقادیر موجود در ورودی ها مطابقت نداشته باشند. از این تعریف به راحتی می توان ویژگی اصلی این عملیات را استنباط کرد: اگر دو بار روی یک عملوند یکسان اعمال شود، بدون توجه به مقدار عملوند دوم، تا زمانی که تغییر نکند، چیزی تغییر نخواهد کرد. این به ویژه در گرافیک کامپیوتری به طور گسترده مورد استفاده قرار می گیرد: اگر ماسکی متشکل از همه واحدها (سفید خالص) را از طریق عملیات XOR روی پس زمینه اعمال کنید، تصویر در این مکان به رنگ وارونه می شود؛ هنگام تکرار همان عمل، همه چیز بدون تغییر بازیابی می شود (بنابراین، به ویژه، انتخاب راحت است (به فصل 10 مراجعه کنید).

این ویژگی اساس تقریباً همه الگوریتم های رمزگذاری است که گاهی اوقات می تواند بسیار پیچیده باشد، اما ما به این موضوع نمی پردازیم، بلکه سعی می کنیم این روش را به شکل اصلی خود اعمال کنیم. برای بررسی، می توانید از این روش ساده استفاده کنید. فرض کنید می خواهیم یک فایل متنی را رمزگذاری کنیم. از آنجایی که ما اسرار دیپلماتیک را پنهان نمی کنیم، طول معمول کلید در چنین مواردی از 8 کاراکتر (64 بیت) برای ما کافی است - این کافی است تا شکستن رمز با نیروی بی رحمانه در یک رایانه شخصی معمولی به یک کار "در حال پرواز" تبدیل شود. غیر قابل حل به عنوان مثال، کلید کلمه "yvre-vich" خواهد بود. در عمل، تحت هیچ شرایطی امکان ایجاد چنین کلیدهایی از نام خانوادگی شما وجود ندارد؛ همچنین نمی توانید از واژه های فرهنگ لغت، تاریخ، شماره تلفن استفاده کنید؛ ورنام همچنین نشان داد که برای رمزگذاری مؤثر، کلید باید کاملاً تصادفی باشد؛ این فقط در اینجا انجام می شود. به عنوان مثال ( بعداً در مورد نحوه تنظیم یک کلید تصادفی صحبت خواهیم کرد).

بیایید یک پروژه جدید (در پوشه Glaval9\l) به نام ProbaCrypt ایجاد کنیم و یک فایل را برای آزمایش در همان پوشه قرار دهیم. متن آهنگ "یک روز دنیا زیر ما خم می شود" را از رپرتوار A. Makarevich (در همان قالب متن فایل mashinavremeni.txt) با آکورد گرفتم، زیرا قالب بندی نسبتاً پیچیده این متن باعث می شود مثال واضح تر 3.

بیایید یک جزء یادداشت، یک گفتگوی OpenDialog و دو دکمه ایمیل Butt را در فرم قرار دهیم. در هدر Buttoni می نویسیم Encrypt، در هدر Buttoni - Decrypt. بیایید متغیرهای زیر را اعلام کنیم:

فرمل: TForml; fname,key:string; fi,fo:فایل بایت; i:integer; xb:byte;

هنگام ایجاد فرم، کلید و گفتگو را مقداردهی اولیه می کنیم:

روش TForml.FormCreate(فرستنده: TObject); کلید شروع:=’yvrevich";

OpenDialogl.InitialDir:=ExtractFiieDir(Application.ExeName); پایان؛

در دکمه کنترل کننده دکمه Buttonl ما کد نسبتا طولانی زیر را می نویسیم:

رویه TForml.ButtonlClick(فرستنده: TObject); /Encrypt/ OpenDialogl را شروع کنید. نام فایل:?= 11 ;(تمیز) OpenDialogl.Filter:=”; اگر OpenDialogl.Execute سپس fname:=OpenDialogl.FileName else خروج; assignfile (fi,fname);(فایل منبع مشخص شده I تلاش كردن

ریست (fi)؛ (اصل را باز کرد)بجز

خروج؛ (اگرنه باز می شود - خروج)پایان؛

assignfile(fo,ChangeFileExt(fname, 1.sec')) ; بازنویسی (fo);

خواندن (fi,xb)؛ (بایت اول را بخوانید)

Forml.Caption:='ProbaCrypt: '+ExtractFileName(fname);

/نامفایل - Vعنوان) Memol.Lines.Clear; Memol.Lines.Add ("صبر کنید...");

Application.ProcessMessages; Memol.Lines.Clear; در حالی که eof(fi) شروع نمی شود

xb:=xb xor ord(key[i]);(ما رمزگذاری می کنیم)

Memol.Text:=Kemol.Text+chi(xb);(خروجی به یادداشت)

نوشتن (fo,xb)؛ (نوشتن در فایل)

خواندن (fi,xb)؛ (اگر فایل در پایان است، خارج شوید)جز شکستن پایان؛ پایان؛ پایان؛

کلودفایل(fi) ;

پاک کردن (fi); (منبع را از بین ببرید)

فایل بسته (fo);

(رمزگذاری شده)پایان؛

در اینجا ما هر بایت از فایل منبع را با بایت های کلیدی به نوبه خود از طریق عملیات XOR اضافه می کنیم. وقتی کلید به پایان می رسد، دوباره با اولین کاراکتر آن شروع می کنیم. نتایج را در فایلی با پسوند sec (از "security") می نویسیم و آن را در Memoi خروجی می دهیم. ما دقیقاً همان عملیات را هنگام رمزگشایی انجام می دهیم، فقط با یک فایل رمزگذاری شده، در نتیجه فایل اصلی به طور کامل بازیابی می شود:

رویه TForml.Buttor.2Click(Sender: TObject); شروع(Pa دیجیتالی کردن j OpenDialogl.FileName:=”;(تمیز/ OpenDialogl.Filter: = '№4>poBaHHbie فایل| *.sec'; اگر OpenDialogl.Execute سپس fname:OpenDialogl.FileName else خارج شوید. assignfile (fi، fname)؛(به صورت رمزگذاری شده باز شد) تلاش كردن

ریست (fi)؛ به جز خروج؛ پایان؛

assignfile(fo,ChangeFileExt(fname, '.txt')); بازنویسی (fo);(رونویسی قبلی) خواندن (fi,xb)؛

Forml.Caption:='ProbaCrypt: '+ExtractFileNajne (fname) ;

!نام فایل – در headerj

Memol.Lines.Clear;

Memol.Lines.Add(1 صبر کنید...');

Application.ProcessMessages;(برای دیدن اخطار) Memol.Lines.Clear; در حالی که eof(fi) شروع نمی شودمطابق بالا تغییر می کند) برای i:=l به طول (کلید) شروع کنید

xb:=xb xor ord(keyU));

Memol.Text:=Memol.Text+chr(xb);

نوشتن (fo,xb)؛

خواندن (fi,xb)؛ جز شکستن پایان؛ پایان؛ پایان؛

کلوزفایل (fi); کلوزفایل(fo);(با رمزگذاری شده) پایان؛

لطفاً توجه داشته باشید که من فایل رمزگذاری شده را از بین نمی برم - در اصل، عملیات رمزگذاری را می توان هر تعداد بار روی متن رمزگذاری شده قبلی انجام داد، برای رمزگشایی آن نیز باید به همان تعداد بار تکرار شود، و این تکنیک اغلب انجام می شود. در الگوریتم های رمزگذاری "رسمی" استفاده می شود (فقط در این مورد، شما باید نام فایل رمزگذاری شده را به صورت دستی تغییر دهید یا برنامه را کمی تغییر دهید؛ در شکل فعلی آن، به شما اجازه نمی دهد یک فایل را هم برای رمزگشایی و هم برای رمزگذاری باز کنید. ). به طور طبیعی، روش رمزگذاری را می توان برای هر فایلی، نه فقط برای فایل های متنی، اعمال کرد.

یک نکته ظریف در ارتباط با از بین بردن نسخه اصلی وجود دارد - همانطور که می دانید، هنگام از بین بردن یک فایل دیسک، مانند ضبط موسیقی روی نوار مغناطیسی پاک نمی شود، بلکه به سادگی در ساختارهای هدر FAT فضایی که اشغال می کند مشخص می شود. به صورت رایگان (این تقریباً در NTFS نیز اتفاق می افتد). با این ویژگی بود که کار برنامه DOS Unerase وصل شد (اگر کسی به خاطر بیاورد که چیست). بنابراین، حتی اگر یک فایل را از سطل بازیافت حذف کنید (فایلی که از برنامه ما حذف شده است، اما به سطل بازیافت ختم نمی شود)، محتویات آن روی دیسک باقی می ماند تا زمانی که چیز دیگری در آنجا نوشته شود. بنابراین، مخصوصاً برای افراد پارانوئید، برنامه‌های رمزگذاری پیشرفته گزینه‌ای را ارائه می‌دهند که در آن تضمین می‌شود که فایل‌ها پس از پاک شدن از بین می‌روند؛ صفرها به جای آن‌ها نوشته می‌شوند. در مورد ما، برای انجام این کار، در اصل، کافی است، بدون بستن فایل، آن را با بایت هایی با مقدار صفر (یا هر چیز دیگری، اما بدون افزایش یا کاهش اندازه فایل) پر کنید، این را روی دیسک بنویسید (بستن فایل)، و سپس آن را از بین ببرید. درست است ، در ویندوز من نمی توانم تضمین 100٪ بدهم که دقیقاً در همان مکان نوشته شود ، بنابراین در چنین مواردی بهتر است از برنامه های "رسمی" استفاده کنید که به هر حال ردپای منبع را نه تنها در ناحیه ای از دیسک که در آن ذخیره شده است، و همچنین در فایل SWAP ویندوز، اگر در آنجا باقی مانده باشند.

در مورد تولید کلیدهای تصادفی، در اینجا یک راه وجود دارد. من پیاده سازی را به طور کامل نشان نمی دهم، زیرا ساده است. مولد اعداد شبه تصادفی در دلفی (و نه تنها در دلفی) به صورت زیر طراحی شده است: شماره اولیه مولد از طریق متغیر RandSeea تنظیم می شود (اما به طور پیش فرض 0 است). سپس تابع Random، وقتی به صورت متوالی به آن دسترسی پیدا کرد، همیشه همان مجموعه اعداد را برمی گرداند، صرف نظر از اینکه چه برنامه ای و چه زمانی از آن استفاده می کنیم. از این رو روش - شما چنین ژنراتوری را در برنامه نصب می کنید و به عنوان مثال، یک کلید بر اساس آن ایجاد می کنید. به این ترتیب می توانید یک مجموعه کاراکتر تصادفی 16 بایتی (128 بیتی) ایجاد کنید که فقط به مقدار آفست اولیه مولد اولیه بستگی دارد:

:

init:integer; st:string;

st:=”;

RandSeed:=init;(افست اولیه) در حالی که طول (st)<16 do begin xb:=Random(255); if xb>31 سپس st:=st+chr(xb); پایان؛

در این صورت، شما نه خود کلید، بلکه مقدار ir.j را به خبرنگار خود منتقل می کنید. او دقیقاً همان کلید را با استفاده از رویه یکسان تولید می کند. البته می توانید مکانیسم های حیله گر بیشتری برای اجرای این روش ارائه دهید.

می خواهم توجه داشته باشم، برای اینکه اصل موضوع مبهم نباشد، قبلاً در برنامه از خواندن سنتی بایت به بایت از یک فایل دیسک استفاده کردم. شما می توانید با استفاده از یکی از مکانیسم های خواندن اولیه یک فایل در حافظه - نقشه برداری فایل، مانند فصل 14، خواندن جریان، یا هر روش دیگری برای سازماندهی آرایه های پویا در حافظه، روند را به طرز چشمگیری افزایش دهید (به فصل 21 مراجعه کنید). در مثال با استفاده از استگانوگرافی، که اکنون به آن خواهیم پرداخت، این وضعیت تا حدی اصلاح خواهد شد.



 


خواندن:



رتبه بندی بهترین هدفون های بی سیم

رتبه بندی بهترین هدفون های بی سیم

آیا می توان گوش های یونیورسال را با قیمت ارزان خریداری کرد؟ 3000 روبل - آیا می توان برای چنین پولی هدفون های باکیفیت خریداری کرد؟ همانطور که معلوم شد، بله. و گفتار...

دوربین اصلی موبایل معمولاً در پشت بدنه قرار دارد و برای گرفتن عکس و فیلم استفاده می شود

دوربین اصلی موبایل معمولاً در پشت بدنه قرار دارد و برای گرفتن عکس و فیلم استفاده می شود

نسخه به روز شده تبلت با ویژگی های بهبود یافته و استقلال بالا. گوشی های هوشمند ایسر به ندرت بازدید می شوند...

چگونه با حفظ شماره خود به اپراتور دیگری سوئیچ کنید

چگونه با حفظ شماره خود به اپراتور دیگری سوئیچ کنید

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

بررسی یک فبلت، گران، اما بسیار شایسته

بررسی یک فبلت، گران، اما بسیار شایسته

نقد و بررسی یک فبلت گران قیمت اما بسیار شایسته 1394/03/20 من تنها کفاش در جهان بدون چکمه، منتقد گوشی هوشمند بدون گوشی هوشمند خودم هستم ....

فید-تصویر RSS