Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added ar-AR translation to algorithms/cryptography #1162

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Prev Previous commit
Next Next commit
Add ar-AR translation to cryptography/hill-cipher
yomalbalooshi committed Aug 19, 2024
commit e51a84c45f319364f832c5f2e616241d2346e458
94 changes: 94 additions & 0 deletions src/algorithms/cryptography/hill-cipher/README.ar-AR.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# شفرة هيل

تعد **شفرة هيل** نوعًا من [شفرات الاستبدال متعددة الأحرف](https://en.wikipedia.org/wiki/Polygraphic_substitution) المبنية على الجبر الخطي.

يتم تمثيل كل حرف برقم [بالنسبة لـ](https://en.wikipedia.org/wiki/Modular_arithmetic) `26`. على الرغم من أن هذه ليست ميزة أساسية للشفرة، إلا أن هذا المخطط البسيط غالبًا ما يُستخدم:

| **Letter** | 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 |
| ---------- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| **Number** | 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 |

## التشفير

لتشفير رسالة، يتم ضرب كل مجموعة من `n` أحرف (تعتبر كمتجه ذو `n` مكون) في مصفوفة قابلة للعكس بأبعاد `n × n`، وذلك بالنسبة لـ `26`.

المصفوفة المستخدمة للتشفير هي _مفتاح الشفرة_، ويجب اختيارها عشوائيًا من مجموعة المصفوفات القابلة للعكس بأبعاد `n × n` (بالنسبة لـ `26`). يمكن بالطبع تكييف الشفرة لأبجدية بأي عدد من الأحرف؛ فقط يجب إجراء جميع العمليات الحسابية بالنسبة لعدد الأحرف بدلاً من النسبة لـ `26`.

لنأخذ الرسالة `ACT`، والمفتاح أدناه (أو `GYB/NQK/URP` بالأحرف):

```
| 6 24 1 |
| 13 16 10 |
| 20 17 15 |
```

بما أن `A` هو `0`، و `C` هو `2` و `T` هو `19`، فإن الرسالة هي المتجه:

```
| 0 |
| 2 |
| 19 |
```

وبالتالي، فإن المتجه المشفر يُعطى بـ:

```
| 6 24 1 | | 0 | | 67 | | 15 |
| 13 16 10 | | 2 | = | 222 | ≡ | 14 | (mod 26)
| 20 17 15 | | 19 | | 319 | | 7 |
```

الآن، لنفترض أن رسالتنا هي `CAT` بدلاً من ذلك (لاحظ كيف نستخدم نفس الأحرف كما في `ACT` هنا)، أو:

```
| 2 |
| 0 |
| 19 |
```

هذه المرة، المتجه المشفر يُعطى بـ:

```
| 6 24 1 | | 2 | | 31 | | 5 |
| 13 16 10 | | 0 | = | 216 | ≡ | 8 | (mod 26)
| 20 17 15 | | 19 | | 325 | | 13 |
```

وهو ما يقابل النص المشفر `FIN`. لقد تغير كل حرف.

## فك التشفير

لفك تشفير الرسالة، يتم ضرب كل مجموعة في معكوس المصفوفة المستخدمة للتشفير. نحول النص المشفر مرة أخرى إلى متجه، ثم نضرب ببساطة في معكوس مصفوفة المفتاح (`IFK/VIV/VMI` بالأحرف). (انظر [عكس المصفوفة](https://en.wikipedia.org/wiki/Matrix_inversion) للحصول على طرق حساب المصفوفة العكسية.) نجد أنه، بالنسبة لـ 26، معكوس المصفوفة المستخدمة في المثال السابق هو:

```
-1
| 6 24 1 | | 8 5 10 |
| 13 16 10 | (mod 26) ≡ | 21 8 21 |
| 20 17 15 | | 21 12 8 |
```

باستخدام النص المشفر السابق `POH`، نحصل على:

```
| 8 5 10 | | 15 | | 260 | | 0 |
| 21 8 21 | | 14 | = | 574 | ≡ | 2 | (mod 26)
| 21 12 8 | | 7 | | 539 | | 19 |
```

وهو ما يعيدنا إلى `ACT`، كما هو متوقع.

## تحديد مصفوفة التشفير

هناك تعقيدان في اختيار مصفوفة التشفير:

١. ليس لجميع المصفوفات معكوس. سيكون للمصفوفة معكوس إذا وفقط إذا كان [محددها](https://en.wikipedia.org/wiki/Determinant) غير صفري.

٢. يجب ألا يكون لمحدد مصفوفة التشفير أي عوامل مشتركة مع الأساس المعياري.

وبالتالي، إذا عملنا بالنسبة لـ `26` كما هو موضح أعلاه، يجب أن يكون المحدد غير صفري، ويجب ألا يكون قابلاً للقسمة على `2` أو `13`. إذا كان المحدد `0`، أو كان له عوامل مشتركة مع الأساس المعياري، فلا يمكن استخدام المصفوفة في شفرة هيل، ويجب اختيار مصفوفة أخرى (وإلا فلن يكون من الممكن فك التشفير). لحسن الحظ، المصفوفات التي تستوفي الشروط لاستخدامها في شفرة هيل شائعة نسبيًا.

## المراجع

- [شفرة هيل على ويكيبيديا](https://en.wikipedia.org/wiki/Hill_cipher)
- [عكس المصفوفة على MathIsFun](https://www.mathsisfun.com/algebra/matrix-inverse.html)
- [GeeksForGeeks](https://www.geeksforgeeks.org/hill-cipher/)