مالذي تقوم به هذه الخوارزمية ؟


#1
def Crypt(msg, key):
    def cipher(i, low=range(97,123), upper=range(65,91)):
        if i in low or i in upper:
            s = 65 if i in upper else 97
            i = (i - s + key) % 26 + s
        return chr(i)
    return ''.join([cipher(ord(s)) for s in msg])

اود منكم ترتيبه بشكل صحيح وكيف اجعله يعمل وان كان من الممكن شرحه
وشكرا لكم مسبقا :slightly_smiling_face:


#2

ببساطة هذا البرنامج هو عبارة عن طريقة تشفير يقوم باخذ رسالة التشفير msg ويقوم بتعويض حرووف الرسالة بحروف اخرى وفقا لل key مثال`

لو وضعنا ال msg  : 
 abc 
و وضعنا ال key : 
2 
ما سيقوم به البرنامج الان هو اخذ حروف الرسالة ويقوم باستبدالها بحروف اخرى
 وفقا لما وضعناه في ال key 

لدينا ال a و ال key 2 
اذن سنقوم بالتقدم بحرفين الى الامام 
ال a ستصبح c 
هذه حوصلة لعملية التشفير التي يقوم بها البرنامج 

بالنسبة للكود نستطيع اختصاره فقط في هذا السطر:

def Crypt(msg, key):
    return ''.join([chr(ord(s)+ key % 26) for s in msg])

لكن لكي تفهم الكود ساقوم بتقسيمه لمراحل:

def Crypt(msg, key):
	crypted = ''
	for letter in msg :
		var = ord(letter) + key % 26
		crypted  += chr(var)
	return crypted

نبدأ:

for letter in msg : 
هنا نقوم بعمل for loop  حول حروف الرسالة 
لنعتبر ان الرسالة كانت abcd 
اذن ال letter الان 
هي a 
var = ord(letter) + key % 26
هنا حيث تتم عملية التشفير  
دور الدالة ord ()
هي اعطاءرقم  ترتيب الحرف في ال ASCII Alphabet Characters
 
اذن قلنا ان اول حرف في الرسالة هو a 
لذا ord(a) ستعطينا
97 وفقا لترتيب الاحرف 
اذن العملية الحسابيى اصبحت 
97 + key  % 26
key = 2 
العملية اصبحت  
97 + 2 % 26  = 21 
	crypted  += chr(var)
هنا دور الدالة chr() هو عكس دور الدالة الاخرى حيث هنا نعطيها نحن 
رقم ترتيب الحرف حسب ال alphabet
وهي تعيد لنا الحرف 
اذن الكود سيكون هكذا 
crypted += chr(21)
وهنا سيعيد لنا الحرف c 

اتمنى ان يكون الشرح قد افادك :rose:


#3

شكراً لك على التوضيح
فعلاً شرح وافي
@malek.salem


#4

شكرا لك استاذ @malek.salem على الشرح و اعتذر عن الازعاج :slightly_smiling_face:


#5

مالك وضح كل شيء بشكل عبقري :sunglasses:

اسم الخوارزمية في الكود caesar cipher, وهي أشهر (وأبسط) خوارزمية في عالم التشفير cryptography

لكسر هذا التشفير شاهد هذا الفيديو (أشهر طريقة هي frequency attack)


#6

ممممم لم افهم اي شيء من الفيديو لانني لا اجيد الانجليزية مع العلم انني اعلم طريقة كسر هذا التشفير

:+1: :+1: شكرا لك استاد :heart_eyes: :heart_eyes:


#7

يوجد ترجمة للفيديو: