در این قسمت تیم کدگیت را با آموزش رمزنگاری سزار در سی شارپ همراهی کنید. رمزنگاری سزار یکی از اولین و سادهترین نوع رمزنگاری میباشد. در این جلسه الگوریتم رمزنگاری سزار و پیاده سازی آن در سی شارپ را توضیح خواهیم داد. قبل از مطالعه این جلسه، پیشنهاد میگردد آموزشهای زیر را مطالعه کنید:
رمزنگاری جانشینی
در رمزنگاری جانشینی هر حرف یا گروهی از حروف با یک حرف یا گروهی دیگر از حروف جابجا میشوند تا در نتیجه شکل پیام بهم بریزد. یکی از قدیمی ترین رمزهای شناخته شده به روش رمز جانشینی، روش رمزنگاری سزار است.
رمزنگاری سزار
رمزنگاری سزار یکی از سادهترین و شناختهشدهترین تکنیکهای رمزگذاری است. رمزنگاری سزار یکی از انواع رمزنگاری جانشینی (جایگزینی حروف) میباشد. در اين الگوريتم جايگزيني حروف براساس ترتيب در حروف الفبا انجام مي شود. به عنوان مثال در صورت یک بار شیفت خوردن حروف، حرف A تبدیل به B میشود و B به C و …. .
فرض کنید حروف الفبا زیر را داریم:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
با توجه به الگوریتم سزار حروف فوق را سه بار شیفت میدهیم. رشته تبدیل یافته به صورت زیر است:
DEFGHIJKLMNOPQRSTUVWXYZABC
با دانستن رشته تبدیل یافته اگر ما بخواهیم کلمه Codegate را به روش سزار(سه بار شیفت) رمز کنیم، کلمه رمز به صورت FrghJdwh میباشد.
رمزنگاری سزار در سی شارپ
برای پیاده سازی رمزنگاری سزار باید چند نکته را به یاد داشت:
- کاراکترهای حروف انگلیسی 26 عدد میباشد.
- کاراکترهای حروف بزرگ در سی شارپ از عدد 65 شروع میشوند
- کاراکترهای حروف کوچک از عدد 97 شروع میشوند.
به عنوان مثال اگر بخواهیم حرف A را در سی شارپ به صورت integer چاپ کنیم در خروجی عدد 65 چاپ خواهد شد. با دانستن موضوع فوق به کد زیر دقت کنید:
public static StringBuilder encrypt(String text, int s)
{
StringBuilder result= new StringBuilder();
for (int i=00; i<text.Length; i++)
{
if (char.IsUpper(text[i]))
{
char ch = (char)(((int)text[i] +
s - 65) % 26 + 65);
result.Append(ch);
}
else
{
char ch = (char)(((int)text[i] +
s - 97) % 26 + 97);
result.Append(ch);
}
}
به طور کلی ما در کد بالا متنی را گرفته و با توجه به مقدار شیفت حروف، تک به تک کاراکتر متن را خوانده و آنها را تبدیل کردهایم. متد بالا متن رمز شده را در خروجی به ما میدهد. در کد فوق یک متد به نام encrypt نوشتیم که دو ورودی میگیرد:
- Text: متنی که میخواهیم آن را رمز کنیم
- S: مقدار شیفت حروف
تست کد رمزنگاری سزار در سی شارپ
برای تست کد فوق، Main زیر را اجرا کنید:
public static void Main (string[] args)
{
String text = "CodeGate";
int s = 3;
Console.WriteLine("Text : " + text);
Console.WriteLine("Shift : " + s);
Console.WriteLine("Cipher: " + encrypt(text, s));
Console.WriteLine ("Press any key to Finish Program....");
Console.ReadKey ();
خروجی کد فوق به صورت زیر میباشد:
Text : CodeGate
Shift : 3
Cipher: FrghJdwh