ROT13

ROT13 هي شيفرة استبدال حروف بسيطة تستبدل حرفًا بالحرف الثالث عشر الذي يليه في الأبجدية اللاتينية . وهي حالة خاصة من شيفرة قيصر التي طُوّرت في روما القديمة ، واستخدمها يوليوس قيصر في القرن الأول قبل الميلاد [ 1 ] (انظر التسلسل الزمني لعلم التشفير ).

قد يُشار إلى ROT13 باسم Rotate13 أو ROT-13 أو التدوير بمقدار 13 مكانًا ، أو أحيانًا باسمه الذاتي EBG13 .

وصف

يتطلب تطبيق ROT13 على نص ما فحص حروفه الأبجدية واستبدال كل حرف بالحرف الذي يليه بـ 13 خانة في الأبجدية اللاتينية ، مع العودة إلى البداية عند الضرورة. [ 2 ]

عند تشفير رسالة، يتحول الحرف A إلى N ، والحرف B إلى O ، وهكذا حتى الحرف M الذي يتحول إلى Z. ثم يستمر التسلسل من بداية الأبجدية: يتحول N إلى A ، والحرف O إلى B ، وهكذا حتى الحرف Z الذي يتحول إلى M. عند فك تشفير رسالة، تُطبق قواعد الاستبدال نفسها، ولكن هذه المرة على النص المشفر باستخدام خوارزمية ROT13. أما الأحرف الأخرى، مثل الأرقام والرموز وعلامات الترقيم والمسافات البيضاء ، فتبقى دون تغيير.

لأن هناك 26 حرفًا في الأبجدية اللاتينية الأساسية و 26 = 2 × 13، فإن دالة ROT13 هي معكوسها الخاص : [ 2 ]

تعفن13(تعفن13(x))=x{\displaystyle {\mbox{ROT}}_{13}({\mbox{ROT}}_{13}(x))=x}لأي نص أساسي مكتوب بالأبجدية اللاتينيةx{\displaystyle x}.

بمعنى آخر، يؤدي تطبيقان متتاليان لـ ROT13 إلى استعادة النص الأصلي (في الرياضيات ، يُطلق على هذا أحيانًا اسم الانعكاس ؛ في علم التشفير، التشفير المتبادل ).

يمكن إجراء التحويل باستخدام جدول بحث ، مثل الجدول التالي:

مدخلABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
الناتجNOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm

على سبيل المثال، في النكتة التالية، تم إخفاء الجزء الأخير منها بواسطة ROT13:

لماذا عبرت الدجاجة الطريق؟
Gb trg gb gur bgure fvqr!

بتحويل النص بأكمله باستخدام صيغة ROT13، يتم الكشف عن إجابة النكتة:

يوليو qvq gur puvpxra pebff gur ebnq?
للوصول إلى الجانب الآخر!

سيؤدي تطبيق ROT13 مرة ثانية إلى استعادة الوضع الأصلي.

الاستخدام

لا يُنصح باستخدام خوارزمية ROT13 في الحالات التي تُعدّ فيها السرية أمرًا بالغ الأهمية، إذ أن استخدام إزاحة ثابتة يعني أن التشفير لا يحتوي فعليًا على مفتاح ، ولا يتطلب فك التشفير معرفة أكثر من مجرد استخدام خوارزمية ROT13. وحتى بدون هذه المعرفة، يُمكن اختراق الخوارزمية بسهولة من خلال تحليل التردد . [ 2 ]

في أوائل ثمانينيات القرن الماضي، استخدم الناس اختصار ROT13 في رسائلهم على خوادم مجموعات أخبار يوزنت . [ 3 ] فعلوا ذلك لإخفاء النكات التي قد تكون مسيئة، أو لإخفاء إجابة لغز أو كشف تفاصيل مهمة ، [ 4 ] أو لخداع برامج البريد العشوائي الأقل تطورًا . وقد كان اختصار ROT13 موضوعًا للعديد من النكات.

تضمنت مسابقة IOCCC الدولية لشفرات C المبهمة لعام 1989 مشاركةً من بريان ويستلي. يمكن ترميز برنامج ويستلي الحاسوبي باستخدام ROT13 أو عكسه، ومع ذلك يتم تجميعه بشكل صحيح. وتتمثل وظيفته عند تنفيذه إما في إجراء ترميز ROT13 على مدخلاته أو عكسها. [ 5 ]

في ديسمبر 1999، تم اكتشاف أن برنامج Netscape Communicator استخدم ROT13 كجزء من مخطط غير آمن لتخزين كلمات مرور البريد الإلكتروني. [ 6 ]

في عام ٢٠٠١، أثبت المبرمج الروسي ديمتري سكلياروف أن شركة "نيو بارادايم ريسيرش جروب" (NPRG)، وهي شركة بائعة للكتب الإلكترونية، تستخدم خوارزمية ROT13 لتشفير مستنداتها. ويُعتقد أن NPRG ربما تكون قد ظنت خطأً أن نموذج ROT13 التجريبي - المُرفق مع حزمة تطوير برامج Adobe للكتب الإلكترونية - نظام تشفير جاد. [ ٧ ] يستخدم نظام التشغيل Windows XP خوارزمية ROT13 في بعض مفاتيح التسجيل الخاصة به. [ ٨ ] كما تُستخدم خوارزمية ROT13 في برنامج Fortune الخاص بنظام Unix لإخفاء الاقتباسات التي قد تُعتبر مسيئة.

أشار يوهان بيسلر ، صانع الساعات ومُصمم آلات الحركة الدائمة في القرن الثامن عشر، إلى أن ROT13 يرمز إلى لقبه باسم Orffyre . وقد استخدم شكله اللاتيني ، Orffyreus ، كاسم مستعار له . [ 9 ]

ثقافة الإنترنت

بسبب عدم ملاءمتها التامة للسرية الحقيقية، أصبحت ROT13 مصطلحًا شائعًا للإشارة إلى أي نظام تشفير ضعيف بشكل واضح ؛ وقد يدّعي أحد النقاد أن " DES ذو 56 بت ليس أفضل حالًا من ROT13 هذه الأيام". وفي تلاعب بالمصطلحات الحقيقية مثل double DES، ظهرت عدة مصطلحات بقصد فكاهي:

  • Double ROT13: تطبيق ROT13 على نص مشفر مسبقًا باستخدام ROT13 ينتج عنه النص الأصلي .
  • ROT26: يعادل عدم وجود تشفير على الإطلاق.
  • تم تضمين خوارزمية 2ROT13 في ورقة بحثية أكاديمية ساخرة بعنوان "حول خوارزمية التشفير 2ROT13". [ 10 ]
  • triple-ROT13: يستخدم على سبيل المزاح قياسًا على 3DES ، وهو يعادل ROT13 العادي.

كانت نكات ROT13 شائعة على العديد من خوادم مجموعات الأخبار ، مثل net.jokes، منذ ثمانينيات القرن الماضي. [ 3 ]

ابتكرت مجموعة الأخبار alt.folklore.urban كلمةً جديدةً هي furrfu ، وهي ترميز ROT13 للعبارة الشائعة sheesh . ظهرت كلمة furrfu في منتصف عام 1992 كرد فعل على منشورات تُكرر الخرافات الحضرية على alt.folklore.urban، بعد أن اشتكى بعض المستخدمين من الإفراط في استخدام عبارة "sheesh!" للرد على الوافدين الجدد . [ 11 ]

أزواج الكلمات

أزواج الكلمات المتبادلة ROT13
abcdefghijklmnopqrstuvwxyzNOPQRSTUVWXYZABCDEFGHIJKLM
آها و نونالنملة والثرثار
العقيق الأسود والعقيقبار وواحد
التقيؤ والآحاديكون و/ أو
سلة المهملات والبيضالمد والجزر والسقف
حسد وسكة حديديةer and re
أخطاء وشعاب مرجانيةرفرفة وتزامن
الفراء وهيجل وجرب
البعوض والنعناعإزعاج وإزعاج
كاتب وبايركسبيورلي وشيريل
بابوا غينيا الجديدة والقططشا والمرح
فربي وشولتيرا وأخضر
ماذا ويونغعنوان URL وهاي
تألقت وفشلت تمامًاآريس ونيرف

بعض الكلمات، عند تحويلها باستخدام ROT13، تُنتج كلمة أخرى. من أمثلة أزواج الكلمات المكونة من سبعة أحرف في اللغة الإنجليزية كلمتا abjurer و nowhere ، وكلمتا Chechen و purpura . تُعرض أمثلة أخرى لأزواج الكلمات في الجدول. [ 12 ] يُعدّ الزوج gnat و tang مثالًا على الكلمات التي تُعتبر متبادلة ومعكوسة في ROT13.

المتغيرات والتركيبات

ROT5 هي ممارسة مشابهة لـ ROT13 تُطبق على الأرقام (من 0 إلى 9). يمكن استخدام ROT13 وROT5 معًا في نفس الرسالة، ويُطلق عليها أحيانًا ROT18 (18 = 13 + 5) أو ROT13.5 .

ROT47 هو مشتق من ROT13، بالإضافة إلى تشفير الأبجدية اللاتينية، يقوم بتحويل الأرقام والرموز الشائعة. بدلاً من استخدام التسلسل A–Zكأبجدية، يستخدم ROT47 مجموعة أكبر من الأحرف من ترميز الأحرف الشائع المعروف باسم ASCII . تحديدًا، يتم تدوير الأحرف القابلة للطباعة ذات 7 بت، باستثناء المسافة، من الحرف 33 ( ! ) إلى 126 ( ~ )، أي 94 حرفًا إجمالاً، مرتبةً حسب رموز ASCII الخاصة بها، بمقدار 47 موضعًا، دون مراعاة حالة الأحرف. على سبيل المثال، يُرمز للحرف A بالرمز p ، بينما يُرمز للحرف a بالرمز 2 .

يؤدي استخدام أبجدية أكبر إلى تشويش أكثر دقة من خوارزمية ROT13؛ فعلى سبيل المثال، +1-415-839-6885لا يكون رقم الهاتف واضحًا للوهلة الأولى من النتيجة المشفرة Z`\c`d\gbh\eggd. من ناحية أخرى، ولأن خوارزمية ROT47 تُدخل الأرقام والرموز دون تمييز، يصبح من الواضح فورًا أن النص قد تم تشفيره.

مثال:

The Quick Brown Fox Jumps Over The Lazy Dog.

التشفير إلى

%96 "F:4< qC@H? u@I yF>AD ~G6C %96 {2KJ s@8]

تحتوي مكتبة GNU C ، وهي مجموعة من الإجراءات القياسية المتاحة للاستخدام في برمجة الحاسوب ، على دالة - [ 13 ] - لها غرض مشابه لـ ROT13، على الرغم من أنها مصممة للاستخدام مع البيانات الثنائية العشوائية . تعمل الدالة عن طريق دمج كل بايت مع النمط الثنائي 00101010 (العشري 42 ) باستخدام عملية XOR (أو الحصرية ). ينتج عن ذلك تشفير XOR بسيط . ومثل ROT13، فإن XOR (وبالتالي ) ذاتي التبادل، وتوفر مستوى أمان مماثلًا، يكاد يكون معدومًا.memfrob()memfrob()

تطبيق

tr

يُعدّ كل من ROT13 و ROT47 سهل التنفيذ إلى حد ما باستخدام تطبيق طرفية Unix tr؛ لتشفير السلسلة "Pack My Box With Five Dozen Liquor Jugs" باستخدام ROT13:

$ # تحويل الأحرف الكبيرة AZ إلى N-ZA-M والأحرف الصغيرة az إلى n-za-m $ tr 'A-Za-z' 'N-ZA-Mn-za-m' <<< "Pack My Box With Five Dozen Liquurs Jugs" Cnpx Zl Obk Jvgu Svir Qbmra Yvdhbe Whtf

وسلسلة "The Quick Brown Fox Jumps Over The Lazy Dog" في ROT47:

$ echo "The Quick Brown Fox Jumps Over The Lazy Dog" | tr '\!-~' 'P-~\!-O' > %96 "F:4< qC@H? u@I yF>AD ~G6C %96 {2KJ s@8

إيماكس وفيم

في Emacs ، يمكن للمرء ROT13 المخزن المؤقت أو التحديد باستخدام الأوامر: [ 14 ]M-x toggle-rot13-mode ، ، أو .M-x rot13-other-windowM-x rot13-region

في محرر النصوص Vim ، يمكن للمرء أن يقوم بتدوير المخزن المؤقت باستخدام الأمر: [ 15 ] .ggg?G

جافا سكريبت

بدون استخدام مكتبات التشفير المدمجة المحددة أو طرق السلسلة المتقدمة، يمكن تنفيذ وظيفة ROT13 يدويًا في JavaScript عن طريق معالجة الأحرف واحدًا تلو الآخر وإجراء بحث مباشر عن الحرف وإزاحته: [ 16 ]

دالة rot13 ( سلسلة نصية ) { const upper_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" . split ( "" ); const lower_case = "abcdefghijklmnopqrstuvwxyz" . split ( "" );let result = "" ;for ( let i = 0 ; i < str . length ; i ++ ) { const char = str [ i ];إذا كان الحرف يحتوي على أحرف كبيرة ، فسيتم تدويره بمقدار 13 خانة . إذا كان الفهرس من 0 إلى 12، فسيتم إضافة 13. إذا كان الفهرس من 13 إلى 25، فسيتم طرح 13. سيتم تدوير الفهرس بمقدار 13 خانة . إذا كان الفهرس أقل من 13 ، فسيتم إضافة 13 خانة ، وإلا فسيتم طرح 13 خانة . سيتم إضافة الفهرس المُدوَّر إلى النتيجة . بعد ذلك ، سيتم التحقق مما إذا كان الحرف صغيرًا .// قم بتدوير الفهرس بمقدار 13 موضعًا. let rotated_Index = index < 13 ? index + 13 : index - 13 ; result += lower_case [ rotated_Index ]; }// إذا لم يكن حرفًا، فأضفه كما هو، وإلا { result += char ; } }return result ; } // مثال على الاستخدام: // console.log(rot13("Hello World!")); // Uryyb Jbeyq! // console.log(rot13("Javascript is fun.")); // Wninfpevcg vf sha.

بايثون

تحتوي وحدة codecs على خيار تحويل النص "rot13" : [ 17 ]

>>> استيراد codecs >>> طباعة ( codecs . encode ( "The Quick Brown Fox Jumps Over The Lazy Dog" , "rot13" )) Gur Dhvpx Oebja Sbk Whzcf Bire Gur Ynml Qbt

يمكن تنفيذ التشفير دون استيراد أي مكتبات عن طريق إنشاء جدول ترجمة يدوياً: [ أ ]

>>> def gen_rot13_table ( func = lambda x : x ): ... for c in ( ord ( "A" ), ord ( "a" )): ... for i in range ( 26 ): ... yield func ( i + c ), func (( i + 13 ) % 26 + c ) >>> table = dict ( gen_rot13_table ( chr )) >>> table {'A': 'N', 'B': 'O', 'C': 'P', 'D': 'Q', 'E': 'R', 'F': 'S', 'G': 'T', 'H': 'U', 'I': 'V', 'J': 'W', 'K': 'X', 'L': 'Y', 'M': 'Z', 'N': 'A'، 'O': 'B'، 'P': 'C'، 'Q': 'D'، 'R': 'E'، 'S': 'F'، 'T': 'G'، 'U': 'H'، 'V': 'I'، 'W': 'J'، 'X': 'K'، 'Y': 'L'، 'Z': 'M'، 'a': 'n'، 'b': 'o'، 'c': 'p'، 'd': 'q'، 'e': 'r'، 'f': 's'، 'g': 't'، 'h': 'u'، 'i': 'v'، 'j': 'w'، 'k': 'x'، 'l': 'y'، 'm': 'z', 'n': 'a', 'o': 'b', 'p': 'c', 'q': 'd', 'r': 'e', ​​'s': 'f', 't': 'g', 'u': 'h', 'v': 'i', 'w': 'j', 'x': 'k', 'y': 'l', 'z': 'm'} >>> >>> s = "Quartz glyph job vext cwm porshrop finks?! >>> print ( "" . join ( table . get ( c , c ) for c in s )) Dhnegm tylcu wbo irkg pjz cbefuebc svaxf?!

بالنسبة لـ Python 3، يمكن استخدام الطريقة str.translate()[ 19 ] (مع str.maketrans()) [ 20 ] :

>>> x , y = zip ( * gen_rot13_table ( chr )) >>> '' .join ( x ) ' ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' >>> '' .join ( y ) 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm ' >>> table = str . maketrans ( '' . join ( x ), '' . join ( y )) >>> table {65: 78, 66: 79, 67: 80, 68: 81, 69: 82, 70: 83, 71: 84, 72: 85, 73: 86, 74: 87, 75: 88, 76: 89, 77: 90, 78: 65, 79: 66, 80: 67, 81: 68, 82: 69, 83: 70, 84: 71, 85: 72, 86: 73, 87: 74, 88: 75, 89: 76, 90: 77, 97: 110, 98: 111، 99: 112، 100: 113، 101: 114، 102: 115، 103: 116، 104: 117، 105: 118، 106: 119، 107: 120، 108: 121، 109: 122، 110: 97، 111: 98، 112: 99، 113: 100، 114: 101، 115: 102، 116: 103، 117: 104، 118: 105، 119: 106، 120: 107، 121: 108، 122: 109} >>> >>> print ( s . translate ( table )) Dhnegm tylcu wbo irkg pjz cbefuebc svaxf?!

انظر أيضاً

ملحوظات

  1. هذا الكود المصدري هو اختلاف طفيف عن مثال في كتاب Zen of Python [ 18 ]

مراجع

  1. كان، ديفيد . كاسرو الشفرات: قصة الكتابة السرية . نيويورك: ماكميلان. ISBN 0-684-83130-9.
  2. 1 2 3 شناير، بروس ( 1996). التشفير التطبيقي ( الطبعة الثانية). جون وايلي وأولاده. ص 11. ISBN   0-471-11709-9.
  3. 1 2 ريموند، إريك س. ، محرر. (29 ديسمبر 2003). "ROT13" . ملف المصطلحات، 4.4.7 . مؤرشف من الأصل في 13 يناير 2012. تم الاطلاع عليه في 19 سبتمبر 2007 .
  4. هامبريدج، سالي (1 أكتوبر 1995). "RFC 1855 - إرشادات آداب استخدام الإنترنت" . فريق عمل هندسة الإنترنت. مؤرشف من الأصل في 2 يناير 2025. تم الاطلاع عليه في 2 يناير 2025 .
  5. ويستلي، برايان (1989). "westley.c" . IOCCC . مؤرشف من الأصل في 9 يونيو 2012. تم الاسترجاع في 13 أغسطس 2007 .
  6. هولبيك، تيم؛ فيغا، جون . "التشفير الضعيف في متصفح نتسكيب: دراسة حالة". CiteSeerX 10.1.1.15.9271 . 
  7. بيرنز، بروس (1 سبتمبر 2001). "ديمتري سكلياروف: عدو أم صديق؟" . أخبار زد نت . مؤرشف من الأصل في 17 أكتوبر 2014. تم الاطلاع عليه في 3 فبراير 2011 .
  8. «يُستخدم ROT13 في نظام ويندوز» . ديدييه ستيفنز . ٢٤ يوليو ٢٠٠٦. مؤرشف من الأصل في ٢٠ ديسمبر ٢٠١٦. تم الاطلاع عليه في ١٥ ديسمبر ٢٠١٦ .
  9. سيمانك، دونالد إي. (2012). "العبث الدائم: تاريخ موجز للبحث عن الحركة الدائمة" . متحف الأجهزة غير القابلة للتطبيق . مؤرشف من الأصل في 10 أكتوبر 2020. تم الاطلاع عليه في 28 أكتوبر 2020 .
  10. "حول خوارزمية التشفير 2ROT13" (ملف PDF) . Prüfziffernberechnung in der Praxis. 25 سبتمبر 2004. مؤرشف (ملف PDF) من الأصل في 15 أبريل 2012. تم الاطلاع عليه في 20 سبتمبر 2007 .
  11. "Furrfu" . Foldoc . 25 أكتوبر 1995. مؤرشف من الأصل في 14 يوليو 2014. تم الاسترجاع في 3 أكتوبر 2016 .
  12. دي مولدر، توم. "كلمات ROT13" . فورفو! . مؤرشف من الأصل في 2 أبريل 2012. تم الاسترجاع في 19 سبتمبر 2007 .
  13. "5.13 إخفاء البيانات" . دليل مكتبة GNU C المرجعي . مؤسسة البرمجيات الحرة . 3 ديسمبر 2006. مؤرشف من الأصل في 2 أغسطس 2019. تم الاطلاع عليه في 2 أغسطس 2019 .
  14. "دليل Rmail Rot13 - GNU Emacs" مؤرشف بتاريخ 24 مارس 2016 في Wayback Machine . www.gnu.org .
  15. "أفضل نصائح VIM، والميزات الرئيسية لـ gVIM، وzzapper" . rayninfo.co.uk . 3 مارس 2016. مؤرشف من الأصل في 3 مارس 2016.
  16. armasahar/rot13-Algorithm ، 26 سبتمبر 2025 ، تم الاطلاع عليه في 26 سبتمبر 2025
  17. "برامج الترميز - سجل برامج الترميز والفئات الأساسية - وثائق بايثون 3.9.6" . ww6.python.org . 2 نوفمبر 2023. مؤرشف من الأصل في 6 أكتوبر 2020. تم الاطلاع عليه في 7 أكتوبر 2020 .
  18. this.py على GitHub
  19. "الأنواع المدمجة str.translate(table, /)" . وثائق بايثون 3 .
  20. "الأنواع المدمجة - str.maketrans" . وثائق بايثون 3 .