التعرف على تشفيرة القيصر CAESAR CIPHER الشهيرة و استخداماتها - Programmer Tech

Programmer Tech

موقع تعليم مجاني يهتم بتعلم البرمجة و علوم الكمبيوتر, أمن المعلومات, القرصنة الأخلاقية, سكربتات

إعلان اعلى المقالة

الخميس، 2 أبريل 2020

التعرف على تشفيرة القيصر CAESAR CIPHER الشهيرة و استخداماتها

التعرف على تشفيرة القيصر CAESAR CIPHER الشهيرة و استخداماتها

تشفيرة CAESAR CIPHER

جمع المعلومات اصبح منتشراً كثيراً, جمع معلومات لبعض الأشخاص في الشارع و التحدث ببيانات مهمة دون تشفير لتلك المعلومات, لذلك سيتم شرح مجموعة من خوارزميات التشفير الشهير و شرح كل نوع منهم بالإضافة الى ذلك انشاء سكربت تشفير و فك تشفير بأكثر من لغة.

قانون قيصر في التشفير

القانون الخاص بالتشفير في هذا يكون :
cipher_text = (P+K) mod 26

شرح القانون

مفتاح التشفير يكون 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.

ملاحظة :
ممكن أن يكون المفتاح 5- وفي تلك الحالة سيتغير القانون ويكون
cipher_text = (P-K) mod 26

يعني بدل الجمع اثناء التشفير سيكون طرح, مثال على ذلك اول حرف من كلمة kaissar

10-5=5 والحرف المقابل لذلك العدد هو F كذلك الأمر الى النهاية لبقية الأحرف.

قانون قيصر في فك التشفير

في عمليات فك التشفير يختلف القانون حسب ترتيب المفتاح اذا كان المفتاح بالسالب سيكون فك التشفير موجب, اما اذا كان موجب سيكون التشفير بالسالب, في المثال السابق كان التشفير هو مفتاح 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
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;
}

سكربت فك التشفير

#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()
لتحميل الاسكربتات السابقة اضغطوا على صورة تحميل السكربت

http://www.mediafire.com/file/d70genjb5ikxrsh/CIPHER.txt/file

ليست هناك تعليقات:

إرسال تعليق

facebook

تسميات

تواصل معنا

Translate

أخر الافكار

من انا

authorمبرمجين ويب و محبين للتقنية و الشبكات و امن المعلومات و سوف نقدم لكم الافضل إن شاء الله
أعرف المزيد ←

نموذج الاتصال

الاسم

بريد إلكتروني *

رسالة *

اقسام