56 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| id: 5900f3a81000cf542c50feba
 | |
| challengeType: 5
 | |
| title: 'Problem 59: XOR decryption'
 | |
| videoUrl: ''
 | |
| localeTitle: 'المشكلة 59: فك XOR'
 | |
| ---
 | |
| 
 | |
| ## Description
 | |
| <section id="description"> يتم تعيين رمز فريد لكل حرف على جهاز الكمبيوتر ويكون المعيار المفضل هو ASCII (الرمز القياسي الأمريكي لتبادل المعلومات). على سبيل المثال ، الأحرف الكبيرة A = 65 ، العلامة النجمية (*) = 42 ، والأحرف الصغيرة k = 107. طريقة التشفير الحديثة هي أخذ ملف نصي ، تحويل البايت إلى ASCII ، ثم XOR كل بايت مع قيمة معينة ، مأخوذة من مفتاح سر. الميزة مع الدالة XOR هي أن استخدام نفس مفتاح التشفير على النص المشفر ، يستعيد النص العادي ؛ على سبيل المثال ، 65 XOR 42 = 107 ، ثم 107 XOR 42 = 65. بالنسبة للتشفير غير القابل للكسر ، يكون المفتاح هو نفس طول رسالة النص العادي ، ويتكون المفتاح من وحدات البايت العشوائية. سيحتفظ المستخدم بالرسالة المشفرة ومفتاح التشفير في مواقع مختلفة ، وبدون كلا "نصفين" ، من المستحيل فك تشفير الرسالة. للأسف ، هذه الطريقة غير عملية لمعظم المستخدمين ، لذا فإن الطريقة المعدلة هي استخدام كلمة مرور كمفتاح. إذا كانت كلمة المرور أقصر من الرسالة ، وهو الأمر المحتمل ، فإن المفتاح يتكرر دوريًا في جميع أنحاء الرسالة. يستخدم رصيد هذه الطريقة مفتاح كلمة مرور طويل بما فيه الكفاية للأمان ، ولكنه قصير بما يكفي ليكون قابلاً للتذكر. لقد أصبحت مهمتك سهلة ، حيث أن مفتاح التشفير يتكون من ثلاثة أحرف أقل. باستخدام cipher.txt (النقر بزر الماوس الأيمن و "حفظ الرابط / الهدف باسم ...") ، والملف الذي يحتوي على رموز ASCII المشفرة ، ومعرفة أن النص العادي يجب أن يحتوي على كلمات إنجليزية شائعة ، قم بفك تشفير الرسالة والعثور على مجموع قيم ASCII في النص الأصلي. </section>
 | |
| 
 | |
| ## Instructions
 | |
| <section id="instructions">
 | |
| </section>
 | |
| 
 | |
| ## Tests
 | |
| <section id='tests'>
 | |
| 
 | |
| ```yml
 | |
| tests:
 | |
|   - text: يجب أن يقوم <code>euler59()</code> بإرجاع 107359.
 | |
|     testString: 'assert.strictEqual(euler59(), 107359, "<code>euler59()</code> should return 107359.");'
 | |
| 
 | |
| ```
 | |
| 
 | |
| </section>
 | |
| 
 | |
| ## Challenge Seed
 | |
| <section id='challengeSeed'>
 | |
| 
 | |
| <div id='js-seed'>
 | |
| 
 | |
| ```js
 | |
| function euler59() {
 | |
|   // Good luck!
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| euler59();
 | |
| 
 | |
| ```
 | |
| 
 | |
| </div>
 | |
| 
 | |
| 
 | |
| 
 | |
| </section>
 | |
| 
 | |
| ## Solution
 | |
| <section id='solution'>
 | |
| 
 | |
| ```js
 | |
| // solution required
 | |
| ```
 | |
| </section>
 |