Misol
Quyidagi diagramma ROT13 algoritm jarayonini tasviriy ravishda tushuntiradi:
Dastur kodi
ROT13 algoritmining dasturini amalga oshirish quyidagicha:
from string import maketrans
rot13trans = maketrans('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm')
# Function to translate plain text
def rot13(text):
return text.translate(rot13trans)
def main():
txt = "ROT13 Algorithm"
print rot13(txt)
if __name__ == "__main__":
main()
Quyidagi rasmda ko'rsatilganidek, ROT13 chiqishini ko'rishingiz mumkin:
Kamchilik
ROT13 algoritmi 13 smenadan foydalanadi. Shuning uchun, shifrlangan matnning shifrini ochish uchun belgilarni teskari yo'nalishda siljitish juda oson.
ROT13 algoritmini tahlil qilish
ROT13 shifrlash algoritmi Caesar Cipherning maxsus holati sifatida ko'rib chiqiladi. Bu juda xavfsiz algoritm emas va chastotani tahlil qilish yoki shunchaki mumkin bo'lgan 25 tugmani sinab ko'rish orqali osongina sindirish mumkin, ROT13 esa 13 joyni siljitish orqali sindirish mumkin. Shuning uchun u hech qanday amaliy foydalanishni o'z ichiga olmaydi.
Transpozitsiya shifrlash - bu kriptografik algoritm bo'lib, unda ochiq matndagi alifbolar tartibi shifrlangan matnni hosil qilish uchun qayta tartibga solinadi. Bu jarayonda haqiqiy oddiy matn alifbolari kiritilmagan.
Misol
Transpozitsiya shifriga oddiy misol ustunli transpozitsiya shifridir , bunda oddiy matndagi har bir belgi belgilangan alifbo kengligi bilan gorizontal ravishda yoziladi. Shifr vertikal ravishda yoziladi, bu esa butunlay boshqa shifr matnini yaratadi.
Oddiy matnli salom dunyosini ko'rib chiqing va quyida ko'rsatilgandek oddiy ustunli transpozitsiya texnikasini qo'llaymiz:
Oddiy matn belgilari gorizontal ravishda joylashtiriladi va shifrlangan matn vertikal formatda yaratiladi: holewdlo lr. Endi qabul qiluvchi shifrlangan matnni oddiy matnga ochish uchun xuddi shu jadvaldan foydalanishi kerak.
Kod
Quyidagi dastur kodi ustunli transpozitsiya texnikasining asosiy amalga oshirilishini ko'rsatadi:
def split_len(seq, length):
return [seq[i:i + length] for i in range(0, len(seq), length)]
def encode(key, plaintext):
order = {
int(val): num for num, val in enumerate(key)
}
ciphertext = ''
for index in sorted(order.keys()):
for part in split_len(plaintext, len(key)):
try:ciphertext += part[order[index]]
except IndexError:
continue
return ciphertext
print(encode('3214', 'HELLO'))
Do'stlaringiz bilan baham: |