رياض الزايدي2 نشر 14 فبراير 2022 أرسل تقرير نشر 14 فبراير 2022 (معدل) كيف نقوم بقراءة ملف نصي وتشفيره وتخزين التشفير في ملف نصي جديد ويمكن للمستخدم فك تشفير متي يشاء تم التعديل في 15 فبراير 2022 بواسطة سامح أشرف توضيع عنوان السؤال 2 اقتباس
0 سامح أشرف نشر 14 فبراير 2022 أرسل تقرير نشر 14 فبراير 2022 يمكنك أن تستخدم الدالة open لقراءة الملفات، على نحو التالي: f = open('filename.txt', 'r') file_content = f.read() print(file_content) لاحظ أن حرف r الموجود في الدالة open يعني قراءة الملف read أما بالنسبة لتشفير المحتوى، فيجب أن تُحدد طريقة التشفير والخوارزمية التي ستعتمد عليها في التشفير، لكي تستطيع أن تقوم بتشفير وفك تشفير المحتوى بشكل سليم، يوجد العديد من المكتبات التي تساعدك في هذه العملية مثل Crypto و cryptography، وتحتوي هذه المكتبات على العديد من خوارزميات التشفير مثل AES و RSA و fernet 1 اقتباس
0 Ali Haidar Ahmad نشر 16 فبراير 2022 أرسل تقرير نشر 16 فبراير 2022 بالنسبة لقراءة ملف نصي، فيمكنك قراءته كما ذكر سامح، والآن سأتحدث عن الجزء الثاني من سؤالك وهو تشفير النص. هناك العديد من الطرق لتشفير النص، سأذكر بعضها: التشفير الجمعي أو تشغير قيصر Additive cipher: في هذه الطريقة يُعطى كل حرف من أحرف الأبجدية قيمة رقمية تسند اليه حسب ترتيبه، كما في الجدول التالي: تؤخذ قيمة كل حرف من النص ويُجمع مع مفتاح التشفير ليكون الناتج هو الحرف المقابل في النص المشفر، وفق المعادلة التالية: C = (M + K) mod n النص المشفر = (النص الأصلي + مفتاح التشفير) باقي القسمة على n، حيث أن n تمثل عدد أحرف الأبجدية (في المثال أعلاه 36).وعملية فك التشفير هي عملية معاكسة لعملية التشفير، وبالتالي للقيام بعملية فك التشفير الجمعي نقوم بحساب النظير الجمعي لمفتاح التشفير ويُجمع مع رقم محرف النص المشفر ليكون الناتج هو الحرف المقابل في النص الأصلي، وفق المعادلة التالية: M = (C - K) mod 26 المشفر الجدائي Multiplicative cipher: بشكل مشابه للمشفر الجمعي، لكن هنا بدلاً من الجمع يكون جداء. C=(M*k) mod n لكن توجد هناك شروط على المفتاح، وهو أن يكون أولياً مع عدد أحرف الأبجدية. ويكون فك التشفير من خلال عكس العملية السابقة: M=(C*k^-1) mod n المشفر Affine: وهو مشفر يجمع بين الطريقتين السابقتين،وعليه فإن المُشفرين السابقين هما حالات خاصة من المشفر Affine ويتم التشفير وفقاً للمعادلة التالية: C=(M*k1+k2) mod n عندما تكون k1=1، يتحول إلى مُشفّر جمعي، وعندما k2=0، يتحول لمُشفّر ضربي. الكود التالي هو تحقيق للمشفر Affine، قمت سابقاً بكتابته، ويمكنك استخدامه لتشفير وفك تشفير النصوص: import numpy as np import math # تعريف الأبجدية alphabet1=['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] # تعريف تابع مساعد لإيجاد النظير الضربي def extendEuclidean(a, b, s1=1, s2=0, t1=0, t2=1): if b: r=a%b return extendEuclidean(b, r, s2, s1-s2*(a//b), t2, t1-t2*(a//b)) return a, s1, t1 التابع التالي يقوم بعملية التشفير المطلوبة: 1. الوسيط الأول هو النص المطلوب تشفيره. 2. الوسيط الثاني هو الأبجدية التي تتعامل معها. 3. الوسيط الثالث هو قيمة المفتاح k1 (مفتاح الجداء). 4. الوسيط الرابع هو مفتاح الجمع k2. 5. الوسيط الخامس نضعه على True في حال كنت تريد إجراء تشفير Affine أو تشفير ضربي وذلك بغية التحقق من صلاحية مفتاح التشفير الذي تريد استخدامه. # تعريف تابع التشفير def affineEncoder(text,alphabet,kmul=1,kadd=0,isAffineOrMul=False): n=len(alphabet) if isAffineOrMul: if math.gcd(n,kmul)!=1: print("invalid key") return False index=np.arange(n) result=[] cipherDict1 =dict(zip(alphabet, index)) cipherDict2 =dict(zip(index,alphabet)) for i in text.lower(): if i.isdigit(): i=int(i) result.append(str(cipherDict2[(cipherDict1[i]*kmul+kadd)%n])) return "".join(result) التابع التالي هو تابع فك التشفير: # تابع فك التشفير def affineDencoder(text,alphabet,kmul=1,kadd=0,isAffineOrMul=False): n=len(alphabet) if isAffineOrMul: _,kmul,_=extendEuclidean(kmul,n) index=np.arange(n) result=[] cipherDict1 =dict(zip(alphabet, index)) cipherDict2 =dict(zip(index,alphabet)) for i in text.lower(): if i.isdigit(): i=int(i) result.append(str(cipherDict2[((cipherDict1[i]-kadd)*kmul)%n])) return "".join(result) على سبيل المثال: # mul Encoder # zend سأشفر الكلمة التالية affineEncoder("zend",alphabet2,kmul=5,isAffineOrMul=True) # فتكون الكلمة بعد التشفير 'vunp' # الآن سنفك التشفير affineDencoder("vunp",alphabet2,kmul=5,isAffineOrMul=True) # 'zend' هناك العديد من المشفرات الأخرى التي يمكن استخدامها، وأشهرها Hill و Playfair و ADV و AutoKey و RC4 و Vigenère cipher إلخ.. وتختلف عن بعضها في مدى تعقيد عملية التشفير وقوته وصعوبة كسره. اقتباس
السؤال
رياض الزايدي2
كيف نقوم بقراءة ملف نصي وتشفيره وتخزين التشفير في ملف نصي جديد ويمكن للمستخدم فك تشفير متي يشاء
تم التعديل في بواسطة سامح أشرفتوضيع عنوان السؤال
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.