Программа шифр виженера питон

Vigenere Cipher Using Python

In this article, we will learn Vigenere Cipher using Python. First, let’s discuss a few points vigenere cipher.

What is Vigenere Cipher

Vigenere Cipher is a technique for encrypting alphabetic content. It utilizes a basic type of polyalphabetic replacement. A polyalphabetic cipher is any cipher dependent on replacement, utilizing numerous replacement alphabets.

The table comprises of the letters in order worked out multiple times in various lines, every letter set moved consistently to one side contrasted with the past letters in order, comparing to the 26 potential Caesar Ciphers.

At various focuses in the encryption cycle, the cipher utilizes alternate letters in order from one of the lines. The letters in order utilized at each point rely upon a rehashing catchphrase.

Encryption – (message+key) % 26

Decryption – (encrytption text-key+26)%26

Vigenere Cipher in Python

1. Firstly, a key is generated with the help of a keyword if the length of the message is not equal to the keyword.

2. Use generateKey function to generate the key. The keyword is appended to itself until the length of the message is equal to the length of the key.

3. Once the key generated use encryption() to encrypt the message which takes two arguments one is the message that needs to be encrypted and the second argument is the key that returns the encrypted text.

4. In the encryption function the message and key are added modulo 26

5. Use the decryption function to decrypt the encrypted message. That takes two arguments one is the encrypted text and the second one is the key that used for encryption.

6. In the decryption function encryption text and key are subtracted, then added 26 modulo 26.

7. Finally, return the encrypted and decrypted messages.

def generateKey(string, key): key = list(key) if len(string) == len(key): return(key) else: for i in range(len(string) -len(key)): key.append(key[i % len(key)]) return("" . join(key)) def encryption(string, key): encrypt_text = [] for i in range(len(string)): x = (ord(string[i]) +ord(key[i])) % 26 x += ord('A') encrypt_text.append(chr(x)) return("" . join(encrypt_text)) def decryption(encrypt_text, key): orig_text = [] for i in range(len(encrypt_text)): x = (ord(encrypt_text[i]) -ord(key[i]) + 26) % 26 x += ord('A') orig_text.append(chr(x)) return("" . join(orig_text)) if __name__ == "__main__": string = input("Enter the message: ") keyword = input("Enter the keyword: ") key = generateKey(string, keyword) encrypt_text = encryption(string,key) print("Encrypted message:", encrypt_text) print("Decrypted message:", decryption(encrypt_text, key))
Enter the message: CODESPEEDY Enter the keyword: TIME Encrypted message: BCVORDWOCM Decrypted message: CODESPEEDY

Источник

Шифр Виженера. Разбор алгоритма на Python

Недавно захотелось вспомнить свое «шпионское» детство и хотя бы базово изучить разные методы шифрования. И первым выбор пал на шифр Виженера. Сам по себе он не является чрезвычайно сложным, но достаточно долго считался криптоустойчивым. Века эдак с XV и к самому XIX, пока некто Казиски полностью не взломал шифр.
Однако ограничим цитирование Википедии только описанием самого алгоритма.

Читайте также:  Убрать крайние пробелы python

Метод является усовершенствованным шифром Цезаря, где буквы смещались на определенную позицию.
Шифр Виженера состоит из последовательности нескольких шифров Цезаря с различными значениями сдвига.

Допустим у нас есть некий алфавит, где каждой букве соответствуют цифры:

image

Тогда если буквы a-z соответствуют числам 0-25, то шифрование Виженера можно записать в виде формулы:

image

image

По сути нам больше ничего и не нужно кроме двух этих формул и мы можем приступить к реализации.

Тут хочу сказать, что я постарался реализовать алгоритм не проще и изящнее, а наиболее понятно и развернуто.
Собственно приступим-с.

Закодируем слова ‘Hello world’ с хитрым ключом ‘key’.

Сначала необходимо создать словарь символов, которые будут участвовать в шифровании:

def form_dict(): d = <> iter = 0 for i in range(0,127): d[iter] = chr(i) iter = iter +1 return d 

Дальше необходимо сопоставить буквы в нашем слове с буквами в словаре и присвоить им соответствующие числовые индексы

def encode_val(word): list_code = [] lent = len(word) d = form_dict() for w in range(lent): for value in d: if word[w] == d[value]: list_code.append(value) return list_code 

И так мы закодировали наше слово и ключ и получили 2 списка индексов:
Value= [72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
Key = [107, 101, 121]

Дальше мы сопоставляем индексы ключа с индексами нашего слова функцией full_encode():

def comparator(value, key): len_key = len(key) dic = <> iter = 0 full = 0 for i in value: dic[full] = [i,key[iter]] full = full + 1 iter = iter +1 if (iter >= len_key): iter = 0 return dic def full_encode(value, key): dic = comparator(value, key) print 'Compare full encode', dic lis = [] d = form_dict() for v in dic: go = (dic[v][0]+dic[v][1]) % len(d) lis.append(go) return lis def decode_val(list_in): list_code = [] lent = len(list_in) d = form_dict() for i in range(lent): for value in d: if list_in[i] == value: list_code.append(d[value]) return list_code 

Получаем наш индексы шифра и переводим их в строку функцией decode_val():

Индексы: [52, 75, 102, 88, 85, 26, 99, 85, 108, 88, 74]

Получаем закодированное суперсекретное послание: 4KfXUcUlXJ

Раскодировать же все это можно с помощью функции full_decode(), первым аргументом которой есть список числовых индексов шифра, а вторым — список индексов ключа:

def full_decode(value, key): dic = comparator(value, key) print 'Deshifre=', dic d = form_dict() lis =[] for v in dic: go = (dic[v][0]-dic[v][1]+len(d)) % len(d) lis.append(go) return lis 

Все так же получаем индексы шифра и переводим их в строку уже знакомой функцией decode_val():
[72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
И вуаля! Наше зашифрованное слово: Hello world

if __name__ == "__main__": word = 'Hello world' key = 'key' print 'Слово: '+ word print 'Ключ: '+ key key_encoded = encode_val(key) value_encoded = encode_val(word) print 'Value= ',value_encoded print 'Key= ', key_encoded shifre = full_encode(value_encoded, key_encoded) print 'Шифр=', ''.join(decode_val(shifre)) decoded = full_decode(shifre, key_encoded) print 'Decode list=', decoded decode_word_list = decode_val(decoded) print 'Word=',''.join(decode_word_list) 

В статье постарался все описать так чтобы было максимально понятно даже для самого начинающего в Python. Хотя данный алгоритм шифрования больше не является на 100% надежным, однако он хорошо подойдет для тех кто стал на путь изучения более серьезных вещей, например того же RSA.

Читайте также:  Php отобразить содержимое папки

Источник

Шифр Виженера. Разбор алгоритма на Python

Шифр Виженера. Разбор алгоритма на Python

2012-03-27 в 19:12, admin , рубрики: python, криптография, шифр Виженера, шифрование, метки: python, шифр Виженера, шифрование

Недавно захотелось вспомнить свое «шпионское» детство и хотя бы базово изучить разные методы шифрования. И первым выбор пал на шифр Виженера. Сам по себе он не является чрезвычайно сложным, но достаточно долго считался криптоустойчивым. Века эдак с XV и к самому XIX, пока некто Казиски полностью не взломал шифр.
Однако ограничим цитирование Википедии только описанием самого алгоритма.

Метод является усовершенствованным шифром Цезаря, где буквы смещались на определенную позицию.
Шифр Виженера состоит из последовательности нескольких шифров Цезаря с различными значениями сдвига.

Допустим у нас есть некий алфавит, где каждой букве соответствуют цифры:

image

Тогда если буквы a-z соответствуют числам 0-25, то шифрование Виженера можно записать в виде формулы:

image

image

По сути нам больше ничего и не нужно кроме двух этих формул и мы можем приступить к реализации.

Тут хочу сказать, что я постарался реализовать алгоритм не проще и изящнее, а наиболее понятно и развернуто.
Собственно приступим-с.

Закодируем слова ‘Hello world’ с хитрым ключом ‘key’.

Сначала необходимо создать словарь символов, которые будут участвовать в шифровании:

def form_dict(): d = <> iter = 0 for i in range(0,127): d[iter] = chr(i) iter = iter +1 return d 

Дальше необходимо сопоставить буквы в нашем слове с буквами в словаре и присвоить им соответствующие числовые индексы

def encode_val(word): list_code = [] lent = len(word) d = form_dict() for w in range(lent): for value in d: if word[w] == d[value]: list_code.append(value) return list_code 

И так мы закодировали наше слово и ключ и получили 2 списка индексов:
Value= [72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
Key = [107, 101, 121]

Дальше мы сопоставляем индексы ключа с индексами нашего слова функцией full_encode():

def comparator(value, key): len_key = len(key) dic = <> iter = 0 full = 0 for i in value: dic[full] = [i,key[iter]] full = full + 1 iter = iter +1 if (iter >= len_key): iter = 0 return dic def full_encode(value, key): dic = comparator(value, key) print 'Compare full encode', dic lis = [] d = form_dict() for v in dic: go = (dic[v][0]+dic[v][1]) % len(d) lis.append(go) return lis def decode_val(list_in): list_code = [] lent = len(list_in) d = form_dict() for i in range(lent): for value in d: if list_in[i] == value: list_code.append(d[value]) return list_code 

Получаем наш индексы шифра и переводим их в строку функцией decode_val():

Индексы: [52, 75, 102, 88, 85, 26, 99, 85, 108, 88, 74]

Получаем закодированное суперсекретное послание: 4KfXUcUlXJ

Раскодировать же все это можно с помощью функции full_decode(), первым аргументом которой есть список числовых индексов шифра, а вторым — список индексов ключа:

def full_decode(value, key): dic = comparator(value, key) print 'Deshifre=', dic d = form_dict() lis =[] for v in dic: go = (dic[v][0]-dic[v][1]+len(d)) % len(d) lis.append(go) return lis 

Все так же получаем индексы шифра и переводим их в строку уже знакомой функцией decode_val():
[72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
И вуаля! Наше зашифрованное слово: Hello world

if __name__ == "__main__": word = 'Hello world' key = 'key' print 'Слово: '+ word print 'Ключ: '+ key key_encoded = encode_val(key) value_encoded = encode_val(word) print 'Value= ',value_encoded print 'Key= ', key_encoded shifre = full_encode(value_encoded, key_encoded) print 'Шифр=', ''.join(decode_val(shifre)) decoded = full_decode(shifre, key_encoded) print 'Decode list=', decoded decode_word_list = decode_val(decoded) print 'Word=',''.join(decode_word_list) 

В статье постарался все описать так чтобы было максимально понятно даже для самого начинающего в Python. Хотя данный алгоритм шифрования больше не является на 100% надежным, однако он хорошо подойдет для тех кто стал на путь изучения более серьезных вещей, например того же RSA.

Читайте также:  Из css в пнг

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Криптоанализ шифра Виженера на Python с поддержкой русского языка

olekzonder/VigenereHacker

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Криптоанализ шифра Виженера на Python с поддержкой русского языка

Грубый перебор по словарю

Криптоанализ шифра Цезаря с помощью частотного анализа

main.py — основная программа

CaesarShiftHacker.py — подбор возможного сдвига шифра Цезаря

DetectLanguage.py — обнаружение русского или английского языка по словарю

DictionaryHacker.py — грубый перебор по словарю

FreqAnalysis.py — частотный анализ

IndexOfCoincidence.py — индекс совпадений

Kasiski.py — анализ Касиски

KeyFinder.py — подбор ключа исходя из сдвигов шифра Цезаря

VigenereDecrypt.py — дешифратор шифра Виженера

Python 3.x, используются лишь встроенные библиотеки

Файлы ввода-вывода будут находиться в папке куда был склонирован репозиторий.

изображение

About

Криптоанализ шифра Виженера на Python с поддержкой русского языка

Источник

Оцените статью