Shifrlash asoslari: Gronsfeld va Vijner shifri
Gronsfeld shifri
Gronsfeld shifrining xususiyatlari
Vijner shifri
Vijner shifrining xususiyatlari
Gronsfeld va Vijner shifrlarini solishtirish
Gronsfeld shifri dasturi
Vijner Shifri
3.00M

5-mavzu (1)

1. Shifrlash asoslari: Gronsfeld va Vijner shifri

2.

Shifrlash — bu axborotni maxfiy holatda saqlash yoki
xavfsiz yetkazib berish uchun matnni shifrlangan
holatga keltirish jarayoni. Kriptografiyaning bu usuli
turli davrlarda turli xil shifrlash texnikalari bilan
rivojlanib kelgan. Ushbu ma’ruzada Gronsfeld shifri
va Vijner shifri haqida to‘xtalamiz. Ikkala usul ham
tarixiy simmetrik shifrlash texnologiyalaridan bo‘lib,
xatli axborotni shifrlash va deshifrlashda foydalaniladi.

3. Gronsfeld shifri

Gronsfeld shifri, aslida, Vijner shifrining soddalashtirilgan
versiyasi bo‘lib, XVI asrga to‘g‘ri keladi. Ushbu shifrlash usuli
kriptografiyada qayta shifrlash tamoyiliga asoslangan.
Gronsfeld shifrining asosiy o‘ziga xosligi shundan iboratki, u
raqamlardan iborat kalitdan foydalanadi. Bu esa uni Vijner
shifridan ancha oddiy qiladi.
Gronsfeld shifrida har bir matn harfi kalitdagi raqam orqali
o‘zgartiriladi. Kalit raqamlardan iborat bo‘lgani uchun matn harflarini
almashtirish orqali shifrlash amalga oshiriladi.

4.

Misol:
Original matn: HELLO
Kalit: 123
Shifrlash qadam-baqadam:
H harfi uchun 1 raqami bo‘yicha surilma (alfavitda H - 8-o‘rinda, 8 + 1 = 9, ya’ni I).
E harfi uchun 2 raqami bo‘yicha surilma (alfavitda E - 5-o‘rinda, 5 + 2 = 7, ya’ni G).
L harfi uchun 3 raqami bo‘yicha surilma (alfavitda L - 12-o‘rinda, 12 + 3 = 15, ya’ni O).
Shifrlangan matn: IGOMQ

5. Gronsfeld shifrining xususiyatlari

Kalit: faqat raqamlardan iborat bo‘lishi mumkin, bu esa uni sodda
qiladi.
Shifrlash va deshifrlash: har bir harf kalitning mos raqamiga
qarab o‘zgartiriladi.
Xavfsizlik darajasi: Gronsfeld shifri Vijner shifriga qaraganda
xavfsizlik nuqtai nazaridan ancha kuchsizroq, chunki kalit faqat
raqamlardan iborat.

6. Vijner shifri

XVI asrda fransuz diplomat
Blaise de Vijner tomonidan ixtiro qilingan
va uzoq vaqt davomida uni sindirish qiyin
bo‘lgan. Bu shifrlash usuli polialfavitik
shifr sifatida mashhur, ya'ni bitta harf bir
nechta turli alfavit orqali shifrlanadi. Kalit
harflardan iborat bo‘lib, u takroriy ravishda
matnning har bir harfi bilan bog‘lanadi.

7.

Vijner shifrida matn va kalit harflariga asoslangan shifrlash amalga oshiriladi. Har bir harf shifrlanganda
kalitning mos harfi bilan bog‘lanadi va shifr jadvali (Vijner jadvali) yordamida yangi harf hosil qilinadi.
Misol:
Original matn: HELLO
Kalit: KEY
Shifrlash qadam-baqadam:
H harfi K harfi bilan bog‘lanadi (Vijner jadvaliga
qaraganda H va K kesishmasi R harfini beradi).
E harfi E harfi bilan bog‘lanadi (E va E kesishmasi
I bo‘ladi).
L harfi Y harfi bilan bog‘lanadi (L va Y
kesishmasi J bo‘ladi).
Shifrlangan matn: RIJVS

8. Vijner shifrining xususiyatlari

Kalit: kalit harflardan iborat va u matn uzunligidan qisqa bo‘lsa, takrorlanadi.
Shifr jadvali: shifrlash va deshifrlash Vijner jadvali orqali amalga oshiriladi, bu
polialfavitik shifrlashni ta’minlaydi.
Xavfsizlik: Vijner shifri uzoq vaqt davomida "Sindirib bo‘lmaydigan shifr"
deb hisoblangan, ammo XIX asrda Friedrich Kasiski tomonidan Kasiski testi
yordamida sindirilgan.

9. Gronsfeld va Vijner shifrlarini solishtirish

Tavsif
Gronsfeld shifri
Vijner shifri
Kalit
Raqamlardan iborat
Harflardan iborat
Shifrlash jarayoni
Kalit raqamlariga ko‘ra harf
almashinuvi
Vijner jadvali orqali
polialfavitik shifrlash
Xavfsizlik
Nisbatan past
Ko‘proq xavfsizlikka ega
Deshifrlash
Osonroq
Biroz murakkabroq
Amaliy qo‘llanish
Oddiy matn shifrlashda
Kuchliroq matn shifrlashda

10. Gronsfeld shifri dasturi

• # Gronsfeld Shifri: Shifrlash va Deshifrlash
def gronsfeld_encrypt(plaintext, key):
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ciphertext = ''
key = [int(i) for i in key]
key_length = len(key)
# Raqamli kalitga o‘girish
for i, char in enumerate(plaintext.upper()):
if char in alphabet:
shift = key[i % key_length]
new_index = (alphabet.index(char) + shift) % 26
ciphertext += alphabet[new_index]
else:
ciphertext += char # Agar belgi alifboda bo'lmasa,
o'zgarmaydi
return ciphertext
def gronsfeld_decrypt(ciphertext, key):
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
plaintext = ''

11.

key = [int(i) for i in key]
key_length = len(key)
# Raqamli kalitga o‘girish
for i, char in enumerate(ciphertext.upper()):
if char in alphabet:
shift = key[i % key_length]
new_index = (alphabet.index(char) - shift) % 26
plaintext += alphabet[new_index]
else:
plaintext += char
return plaintext
# Misol
plaintext = "HELLO WORLD"
key = "231"
ciphertext = gronsfeld_encrypt(plaintext, key)
print(f"Shifrlangan matn: {ciphertext}")
decrypted_text = gronsfeld_decrypt(ciphertext, key)
print(f"Deshifrlangan matn: {decrypted_text}")

12. Vijner Shifri

• # Vigenère Shifri: Shifrlash va Deshifrlash
def vigenere_encrypt(plaintext, key):
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ciphertext = ''
key = key.upper() # Kalitni katta harflar qilib o'zgartirish
key_length = len(key)
for i, char in enumerate(plaintext.upper()):
if char in alphabet:
shift = alphabet.index(key[i % key_length])
new_index = (alphabet.index(char) + shift) % 26
ciphertext += alphabet[new_index]
else:
ciphertext += char # Agar belgi alifboda bo'lmasa, o'zgarmaydi
return ciphertext
def vigenere_decrypt(ciphertext, key):
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
plaintext = ''
key = key.upper()
key_length = len(key)

13.

• for i, char in enumerate(ciphertext.upper()):
if char in alphabet:
shift = alphabet.index(key[i % key_length])
new_index = (alphabet.index(char) - shift)
% 26
plaintext += alphabet[new_index]
else:
plaintext += char
return plaintext
# Misol
plaintext = "HELLO WORLD"
key = "KEY"
ciphertext = vigenere_encrypt(plaintext, key)
print(f"Shifrlangan matn: {ciphertext}")
decrypted_text = vigenere_decrypt(ciphertext, key)
print(f"Deshifrlangan matn: {decrypted_text}")
English     Русский Правила