رمزنگاری Hill در سی شارپ

دوشنبه 1 آذر 1395

رمز نگاری Hill به مراتب از رمز نگاری monoalphabetic بهتر است.این نوع رمز نگاری در ماتریس های ریاضی کاربرد دارد.یک ماتریس یک آرایه مستطیل شکل از اعداد، نمادها یا عبارت مرتب در سطر و ستون است.

رمزنگاری Hill در سی شارپ

رمز نگاری Hill در سی شارپ

رمز نگاری Hill به مراتب از رمز نگاری monoalphabetic بهتر است.این نوع رمز نگاری در ماتریس های ریاضی کاربرد دارد.بنابراین قبل از اینکه جلوتر پیش بریم باید با ماتریس ها آ شنا شویم.

یک ماتریس یک آرایه مستطیل شکل از اعداد، نمادها یا عبارت مرتب در سطر و ستون است.

به صورت مثال یک ماتریس 2X2  از دو سطر و دو ستون تشکیل می شود.

ماتریس 2x3  از دو سطر و سه ستون تشکیل  میشود.

در اینجا با چگونه کار کردن و جستجو در ماتریس آشنا می شویم.

رمز نگاری Hill چگونه کار می کند؟

فرض کنید شما بخواهید این واژه “Dr Greer Rocks“ را رمز کنید.در زیر مراحل رمز کردن را طی و مشاهده کنید.

Plaintext = = > Dr Greer Rocks

مرحله 1

در ماتریس 2X2  که عناصر آن از اعداد صحیح کمتر از 26 تشکیل شده است مورد تجزیه تحلیل قرار گرفته است .در حال حاضر ما فرض میکنیم که عملیات رمزنگاری را روی ماتریس زیر انجام دهیم.

مرحله  2

بررسی کنید در صورتی که از دو یا سه عامل کمتر است به مرحله قبلی بازگردید و ماتریس رمزنگاری را تغییر دهید.

دترمینان ماتریس M , -5 میشود که از 2یا 13 عامل نیست پس به مرحله بعدی می رویم.

مرحله 3

در این مرحله به هرکدام از حروف موجود در متن یک عدد میدهیم که این اعداد از یک شروع شده مثلا حرف A=1 و الی آخر ,سپس مانند زیر حروف را دوتا دوتا تقسیم می کنیم.

DR GREER ROCKS => [DR], [GR], [EE], [RR], [OC], [KS]

مرحله 4

در این مرحله هر کدام از دو عدد را در ماتریس ضرب میکنیم.

مرحله 5

سپس هر کدام از اعداد را بر 26 تقسیم میکنیم.

مرحله 6

 هر کدام از اعداد را به حرف معادل آن تبدیل می کنیم.

مرحله 7

با تراز کردن حروف مانند زیر حالت رمز نگاری عبارت مورد نظر شما بدست می آید.

پیاده سازی رمز نگاری Hill در سی شارپ

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Hill_Cipher {  
    class Program {  
        static void Main(string[] args) {  
            int i, j, sum = 0, end = 0;  
            int[, ] mtrx = new int[25, 25];  
            int[, ] ans = new int[25, 1];  
            string text = "";  
  
            Console.WriteLine("Enter your Plaintext");  
            Console.Write("\n");  
            text = Console.ReadLine();  
            Console.Write("\n");  
            char[] txt = text.ToCharArray();  
            end = txt.Length;  
  
  
            for (i = 0; i < end; i++) {  
                txt[i] = Convert.ToChar(txt[i] - 'a');  
            }  
  
            Random rnd = new Random();  
            for (i = 0; i < end; i++) {  
                for (j = 0; j < end; j++) {  
  
                    mtrx[i, j] = rnd.Next();  
                }  
  
            }  
  
            for (i = 0; i < end; i++) {  
  
                sum = 0;  
                for (j = 0; j < end; j++) {  
                    sum += mtrx[i, j] * (int) txt[j];  
                }  
                ans[i, 0] = sum;  
            }  
  
            Console.Write("Your CipherText is:");  
            for (i = 0; i < end; i++) {  
                char cipher = (char)(((ans[i, 0]) % 26) + 97);  
                Console.Write("\t" + cipher);  
  
            }  
  
            Console.ReadKey();  
  
        }  
  
    }  
}  

نمایش خروجی

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 3k بازدید
  • 7 تشکر

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید