شيفرة قيصر CAESAR CIPHER
تشفير قيصر CAESAR CIPHER, جمع المعلومات اصبح منتشراً كثيراً, جمع معلومات لبعض الأشخاص في الشارع و التحدث ببيانات مهمة دون تشفير Encryption لتلك المعلومات.
لذلك سيتم شرح مجموعة من خوارزميات التشفير الشهيرة و شرح كل نوع منهم بالإضافة إلى ذلك إنشاء سكربت تشفير و فك تشفير بأكثر من لغة برمجة.
القانون الخاص بتشفير القيصر CAESAR CIPHER
cipher_text = (P+K) mod 26
شرح قانون قيصر في التشفير CAESAR CIPHER
مفتاح التشفير لشيفرة القيصر يكون key+5.
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
قانون خوارزمية قيصر يقول أن cipher text +key وهنا نقصد المفتاح على mod26 وهذا عدد احرف اللغة الأنجليزية, دعونا نأخذ مثال بسيط لفهم هذا الأمر بشكل أفضل.
مثال
أريد تشفير كلمة KAISSAR لنأخذ حرف حرف نأتي الآن للحرف الأول من كلمة KAISSAR وهو K الرقم الذي يقابل ذلك الحرف KEY+ 10 أي أن 10+5=15, الآن نأتي إلى الخطوة الثانية.
الحرف المقابل للعدد 15 هو P اذاً تم تشفير الحرف الأول نأتي إلى الحرف الثاني في كلمة KAISSAR وهو A نفس. الأمر الرقم المقابل للحرف A +5 اذاً سيكون 0+5 =5 والحرف المقابل للرقم 5 هو F تم تشفير الحرف الثاني.
نأتي إلى الحرف الثالث من الكلمة وهو I الرقم المقابل لذلك الحرف هو 8, اذاً 8 + 5 =13 الحرف المقابل. لهذا العدد هو N ,تم تشفير الحرف الثالث حتى تصبح الكلمة المشفرة لدينا إلى الآن PFN.
الآن نأتي إلى الحرف الرابع و الخامس وهما S S, ما هو الرقم المقابل لتلك الحروف؟ هو الرقم 18 اذاً. سيكون 18 + 5 = 23, الآن نأتي إلى الحرف المقابل للـ 23 هو X حتى تصبح الكلمة الى الآن PFNXX.
الآن نأتي إلى الحرف السادس وهو A و الرقم المقابل له هو 0 اذاً 0+5=5 الحرف المقابل لذلك العدد. هو F حتى تصبح PFMXXF نأتي الآن إلى الحرف الأخير وهو R و الرقم المقابل له 17+5=22 الحرف المقابل للعدد هو W حتى يصبح التشفير في النهاية PFNXXFW.
في حال تغيير القانون إلى السالب فإن شكله سوف يكون كما يلي:
cipher_text = (P-K) mod 26
يعني بدل الجمع اثناء التشفير Encryption سيكون طرح.
مثال على ذلك اول حرف من كلمة kaissar سيكون 10-5=5 والحرف المقابل لذلك العدد هو F كذلك الأمر إلى النهاية لبقية الأحرف.
شرح قانون قيصر في فك التشفير CAESAR CIPHER
في عمليات فك التشفير Decryption يختلف القانون حسب ترتيب المفتاح اذا كان المفتاح بالسالب سيكون فك التشفير Decryption موجب.
أما إذا كان موجب سيكون التشفير بالسالب, في المثال السابق كان التشفير هو مفتاح 5 يعني موجب وفي تلك الحالة سيكون التشفير سالب وكان التشفير للكلمة هو KAISSAR.
في المثال السابق كان التشفير لكلمة PFNXXFW, هيا بنا لنفك هذا التشفير وسيتغير القانون اثناء التشفير ليكون CAESAR TEXT P-K.
نأتي الآن نأخذ اول حرف من الكلمة المشفرة وهو P.
الرقم المقابل لذلك الحرف هو 15 اذاً سنقوم بتطبيق القانون 15-5=10.
الخطوة الثانية, الرقم المقابل للعدد 10 هو K نأخذ الحرف الثاني هو F, الرقم المقابل لذلك الحرف. هو 5 اذاً سيكون 5-5=0 الحرف المقابل لذلك العدد هو A حتى يصبح فك التشفير الى الآن KA.
نأتي إلى الحرف الثالث وهو N و الرقم المقابل للحرف هو 13 ونطبق القانون 13-5=8 الحرف المقابل. لذلك العدد هو I حتى يصبح فك التشفير الى الآن KAI الآن نأتي إلى الحرف الرابع و الخامس وهو X X الرقم المقابل للحروف هو 23 اذاً التطبيق سيكون 23-5=18.
الحرف المقابل لذلك العدد هو S حتى يصبح فك التشفير إلى الآن KAISS نأتي إلى الحرف السادس. وهو F الرقم المقابل لذلك الحرف هو 5 تطبيق القانون 5-5=0 الحرف المقابل لذلك العدد هو A يصبح فك التشفير الى الان KAISSA.
نأتي الى الحرف الأخير وهو W الرقم المقابل لذلك الحرف هو 22 تطبيق القانون 22-5=17 الحرف. المقابل لذلك العدد هو R و هكذا يكون انتهى فك التشفير ويكون الناتج بعد الفك KAISSAR .
لكن ملحوظة إذا كان مفتاح التشفير موجب يجب أن يتم تطبيق ذلك القانون اثناء التشفير.
caesar_text = (p-k)
اما اذا كان التشفير سالب يجب عليك تطبيق ذلك القانون اثناء فك التشفير.
caesar_text = (p + k)
الآن سنقوم بعمل سكربت تشفير وفك تشفير لأكثر من لغة.
إنشاء سكربت تشفير قيصر بلغة PHP
<?php
function encrypt($text, $s)
{
$result = "";
for ($i = 0; $i < strlen($text); $i++)
{
if (ctype_upper($text[$i]))
$result = $result.chr((ord($text[$i]) + $s - 65) % 26 + 65);
else
$result = $result.chr((ord($text[$i]) +
$s - 97) % 26 + 97);
}
return $result;
}
$text = "kaissar";
$s = 5;
echo "Text : " . $text;
echo "\nShift: " . $s;
echo "\nCipher: " . encrypt($text, $s);
?>
إنشاء سكربت فك تشفير قيصر بلغة PHP
<?php
function encrypt($str, $offset) {
$encrypted_text = "";
$offset = $offset % 26;
if($offset < 0) {
$offset += 26;
}
$i = 0;
while($i < strlen($str)) {
$c = strtoupper($str{$i});
if(($c >= "A") && ($c <= 'Z')) {
if((ord($c) + $offset) > ord("Z")) {
$encrypted_text .= chr(ord($c) + $offset - 26);
} else {
$encrypted_text .= chr(ord($c) + $offset);
}
} else {
$encrypted_text .= " ";
}
$i++;
}
return $encrypted_text;
}
function decrypt($str, $offset) {
$decrypted_text = "";
$offset = $offset % 26;
if($offset < 0) {
$offset += 26;
}
$i = 0;
while($i < strlen($str)) {
$c = strtoupper($str{$i});
if(($c >= "A") && ($c <= 'Z')) {
if((ord($c) - $offset) < ord("A")) {
$decrypted_text .= chr(ord($c) - $offset + 26);
} else {
$decrypted_text .= chr(ord($c) - $offset);
}
} else {
$decrypted_text .= " ";
}
$i++;
}
return $decrypted_text;
}
$text = "kaissar";
$offset = 5;
$enc = encrypt($text, $offset);
echo $enc;
echo "<br />";
echo decrypt($enc, $offset);
?>
إنشاء سكربت تشفير قيصر بلغة C++
#include <iostream>
using namespace std;
string encrypt(string text, int s)
{
string result = "";
for (int i=0;i<text.length();i++)
{
if (isupper(text[i]))
result += char(int(text[i]+s-65)%26 +65);
else
result += char(int(text[i]+s-97)%26 +97);
}
return result;
}
int main()
{
string text="KAISSAR";
int s = 5;
cout << "Text : " << text;
cout << "\nShift: " << s;
cout << "\nCipher: " << encrypt(text, s);
return 0;
}
إنشاء سكربت فك تشفير قيصر بلغة C++
#include<iostream>
using namespace std;
int main()
{
char message[100], ch;
int i, key;
cout << "Enter a message to decrypt: ";
cin.getline(message, 100);
cout << "Enter key: ";
cin >> key;
for(i = 0; message[i] != '\0'; ++i){
ch = message[i];
if(ch >= 'a' && ch <= 'z'){
ch = ch - key;
if(ch < 'a'){
ch = ch + 'z' - 'a' + 1;
}
message[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch - key;
if(ch > 'a'){
ch = ch + 'Z' - 'A' + 1;
}
message[i] = ch;
}
}
cout << "Decrypted message: " << message;
return 0;
إنشاء سكربت تشفير قيصر بلغة بايثون
def encrypt(text,s):
result = ""
# traverse text
for i in range(len(text)):
char = text[i]
# Encrypt uppercase characters
if (char.isupper()):
result += chr((ord(char) + s - 65) % 26 + 65)
# Encrypt lowercase characters
else:
result += chr((ord(char) + s - 97) % 26 + 97)
return result
#check the above function
text = "kaissar"
s = 5
print "Text : " + text
print "Shift : " + str(s)
print "Cipher: " + encrypt(text,s)
إنشاء سكربت فك تشفير قيصر بلغة بايثون
def decrypt():
ciphertext = raw_input('Please enter your Encrypted sentence here:')
shift = int(raw_input('Please enter its shift value: '))
space = []
# creat a list of encrypted words.
ciphertext = ciphertext.split()
# creat a list to hold decrypted words.
sentence = []
for word in ciphertext:
cipher_ords = [ord(x) for x in word]
plaintext_ords = [o - shift for o in cipher_ords]
plaintext_chars = [chr(i) for i in plaintext_ords]
plaintext = ''.join(plaintext_chars)
sentence.append(plaintext)
# join each word in the sentence list back together by a space.
sentence = ' '.join(sentence)
print 'Decryption Successful\n'
print 'Your encrypted sentence is:', sentence
decrypt()
قم بمشاهدة الدرس فيديو على يوتيوب من خلال الضغط على زر تشغيل الفيديو الآتي