سلام
روش One Time Pad (به هم ريزي محتواي پيام)
در اين روش يك رشته تصادفي دلخواه به عنوان كليد در نظر ميگيريم كه طولش بايد برابر طول متن آشكار باشه
سپس كد اسكي حروف متن اصلي رو حرف به حرف با كد اسكي حروف كليد رمز XOR ميكنيم و اگر كليد خوبي انتخاب كنيم متن رمز شده هيچكدوم از خصوصيات آماري زبان (تكرار حروف و تركيبات) رو نداره بنابراين رمزشكني تقريبا غير ممكنه
اين روش با روش XOR معمولي كه راحت شكسته ميشه فرق داره، در XOR معمولي ما تمام حروف متن رو با فقط يك عدد خاص XOR ميكنيم بنابراين با امتحان اعداد مختلف در يك حلقه ساده، خيلي راحت ميشه رمزشكني رو انجام داد ولي در اين روش هر حرف جداگانه با يك عدد XOR ميشه و اگر فرض كنيم متن اصلي ما فقط و فقط 3 حرف باشه و هر حرفش با عددي 6 رقمي XOR بشه 999997000002999999 حالت مختلف داريم، حالا اگر متنمون بزرگتر بشه ميشه 999999 به توان تعداد حروف متن آشكار يعني عملا قابل تست كردن نيست تازه اين براي عدد 6 رقمي هست و اگر اون رو بيشتر كنيم باز هم تعداد حالات به صورت نجومي بالا ميره
البته اين روش معايبي هم داره
1 - كليد رو نميتونيم به خاطر بسپريم چون طولش زياده، ضمنا توليد كليد مشكله
2 - حجم اطلاعات دو برابر ميشه (طول متن + طول كليد)
3 - كليد رو بايد از كانال امني به گيرنده بديم و اگر چنين كانال امني داشته باشيم چرا خود اطلاعات اصلي رو به همين روش نديم ! (جوابشم اينكه خب به اين دليل كه اولا از اين روش ميتونيم براي رمزنگاري متون برنامه و ديتا هامون استفاده كنيم، دوما فرض كنيم كانال امن هم داريم اما رمزگذاري اطمينان بيشتري براي ما به ارمغان مياره)
اينم يك نمونه كد كه اول متن رو رمز ميكنه بعد با استفاده از كليد، رمزگشايي ميكنه
براي رمزگشايي، متن رمز شده (Cipher) رو دوباره به همون روش با كليد XOR ميكنيم
Private Sub Form_Load()
Dim Plain$, Key$, Cipher$, i%, decode$
Plain = "Hello, How are you"
Key = "ajuwerxsdfjhskdf1ks"
'---------- Encode Section ----------------
For i = 1 To Len(Plain)
Cipher = Cipher & Chr$(Asc(Mid$(Plain, i, 1)) Xor Asc(Mid$(Key, i, 1)))
Next
MsgBox Cipher
'---------- Decode Section ----------------
For i = 1 To Len(Cipher)
decode = decode & Chr$(Asc(Mid$(Cipher, i, 1)) Xor Asc(Mid$(Key, i, 1)))
Next
MsgBox decode
End Sub