y E k = x E k E k = x.
Bunda shifrlash va dekodlashda foydalaniladigan kalitlar ketma-ketligi bir-birini kompensatsiya qiladi (2 modul qo'shilganda) va natijada asl matnning x belgilari tiklanadi. Vernam o'z tizimini ishlab chiqishda uni transmitter va qabul qilgichga o'rnatilgan halqali lentalar bilan sinovdan o'tkazdi, shunda bir xil kalit ketma-ketligi ishlatilgan. Shuni ta'kidlash kerakki, Vernam usuli kalitlar ketma-ketligining uzunligiga bog'liq emas va qo'shimcha ravishda u tasodifiy kalitlar ketma-ketligidan foydalanishga imkon beradi. Biroq, Vernam usulini amalga oshirishda, jo'natuvchi bilan bir xil kalitlar ketma-ketligini qabul qiluvchiga etkazib berish yoki jo'natuvchi va qabul qiluvchidan bir xil kalit ketma-ketligini xavfsiz saqlash zarurati bilan bog'liq jiddiy muammolar mavjud. Vernam shifrlash tizimining bu kamchiliklari gamma shifrlash orqali bartaraf etiladi.
Kiritilgan matnni shifrlash va deshifrlash dasturi:
import string
matn= string.ascii_letters
dict1 = {}
kalit = int(input("Kalitni kiriting: "))
for i in range(len(matn)):
dict1[matn[i]] = matn[(i+kalit)%len(matn)]
kiritiladigan_matn= str(input("Matn kiriting: "))
shifr_matn=[]
for char in kiritiladigan_matn:
if char in matn:
temp = dict1[char]
shifr_matn.append(temp)
else:
temp =char
shifr_matn.append(temp)
shifr_matn= "".join(shifr_matn)
print("Shifrlangan matn: ",shifr_matn)
dict2 = {}
for i in range(len(matn)):
dict2[matn[i]] = matn[(i-kalit)%(len(matn))]
deshifr_matn = []
for char in shifr_matn:
if char in matn:
temp = dict2[char]
deshifr_matn.append(temp)
else:
temp = char
deshifr_matn.append(temp)
deshifr_matn = "".join(deshifr_matn)
print("Deshifrlangan matn :", deshifr_matn)
Matnni shifrlash dastur kodi:
5-rasm. Matnni shifrlash dastur kodi.
Do'stlaringiz bilan baham: |