در این قسمت تیم کدگیت را با آموزش رمزنگاری سزار در جاوا همراهی کنید. رمزنگاری سزار یکی از اولین و سادهترین نوع رمزنگاری میباشد. در این جلسه الگوریتم این رمزنگاری و پیاده سازی آن در جاوا را توضیح خواهیم داد. قبل از بررسی این جلسه، پیشنهاد میکنیم آموزشهای زیر را مطالعه کنید:
رمزنگاری جانشینی
در رمزنگاری جانشینی هر حرف یا گروهی از حروف با یک حرف یا گروهی دیگر از حروف جابجا میشوند تا در نتیجه شکل پیام بهم بریزد. یکی از قدیمی ترین رمزهای شناخته شده به روش رمز جانشینی، روش رمزنگاری سزار است.
رمزنگاری سزار
رمزنگاری سزار یکی از سادهترین و شناختهشدهترین تکنیکهای رمزگذاری است. رمزنگاری سزار یکی از انواع رمزنگاری جانشینی (جایگزینی حروف) میباشد. در اين الگوريتم جايگزيني حروف براساس ترتيب در حروف الفبا انجام مي شود. به عنوان مثال در صورت یک بار شیفت خوردن حروف، حرف A تبدیل به B میشود و B به C و …. .
فرض کنید حروف الفبا زیر را داریم:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
با توجه به الگوریتم سزار حروف فوق را سه بار شیفت میدهیم. رشته تبدیل یافته به صورت زیر است:
DEFGHIJKLMNOPQRSTUVWXYZABC
با دانستن رشته تبدیل یافته اگر ما بخواهیم کلمه Codegate را به روش سزار(سه بار شیفت) رمز کنیم، کلمه رمز به صورت FrghJdwh میباشد.
رمزنگاری سزار در جاوا
برای پیاده سازی رمزنگاری سزار در جاوا باید چند نکته را به یاد داشت:
- کاراکترهای حروف انگلیسی 26 عدد میباشد.
- کاراکترهای حروف بزرگ در جاوا از عدد 65 شروع میشوند
- کاراکترهای حروف کوچک از عدد 97 شروع میشوند.
به عنوان مثال اگر بخواهیم حرف A را در جاوا به صورت integer چاپ کنیم در خروجی عدد 65 چاپ خواهد شد. با دانستن موضوع فوق به کد زیر دقت کنید:
public static String encrypt(String text, int s) {
String result = "";
for (int i = 0; i < text.length(); i++) {
if (Character.isUpperCase(text.charAt(i))) {
char ch = (char) (((int) text.charAt(i) + s - 65) % 26 + 65);
result+=ch;
} else {
char ch = (char) (((int) text.charAt(i) + s - 97) % 26 + 97);
result+=ch;
}
}
return result;
}
به طور کلی ما در کد بالا متنی را گرفته و با توجه به مقدار شیفت حروف، تک به تک کاراکتر متن را خوانده و آنها را تبدیل کردهایم. متد بالا متن رمز شده را در خروجی به ما میدهد. در کد فوق یک متد به نام encrypt نوشتیم که دو ورودی میگیرد:
- Text: متنی که میخواهیم آن را رمز کنیم
- S: مقدار شیفت حروف
تست کد رمزنگاری سزار در جاوا
برای تست کد فوق، Main زیر را اجرا کنید:
public static void main(String[] args) {
String text = "CodeGate";
int s = 3;
System.out.println("Text : " + text);
System.out.println("Shift : " + s);
String cipher = encrypt(text, s);
System.out.println("Cipher: " + cipher);
}
خروجی کد فوق به صورت زیر میباشد:
Text : CodeGate
Shift : 3
Cipher: FrghJdwh
سلام چطوری متن کد شده رو دیکد کنیم؟
سلام. وقت بخیر. شما تعداد شیفت را در اختیار دارید و به صورت معکوس باید متن را دیکد کنید یعنی شیفت به چپ بدهید کاراکترها را تا بتوانید متن اصلی را پیدا نمایید.