Skip to content Skip to sidebar Skip to footer

Modified Vigenere Cipher In Python - Alphabet

This is what I have to do: Write a script in Python that is an implementation of a version of the Vigenere cipher for English text. Your script should distinguish lowercase and up

Solution 1:

You code currently has the following problems (I am assuming that var = 0, encr = [], encr1 = [], key1 = list(key) and text1 = list(text) happen before the code you have posted):

  1. Your while loop will never start if the key is longer than the plaintext, and never end otherwise, as you never shorten text1 (and doing so would break your indexing);
  2. You don't need to manually increment the counter in a for loop (and if you wanted to, i + 1 without assignment effectively does nothing, you need i += 1);
  3. When using mod (%), you don't need to check if e.g. num3 < 25; and
  4. If you get around to including them, note that the extra characters you list aren't the same as those specified ("/" != "-").

Rather than using ord and chr, I would build my own alphabet to cycle over, e.g.

from string import ascii_uppercase

alphabet = list(ascii_uppercase) + [",", ".", "-", "_"]

You might find this implementation of the "standard" Vigenère helpful:

from itertools import cycle

def vigenere(plain, key, alphabet):
    for p, k in zip(plain, cycle(key)):
        index = alphabet.index(p) + alphabet.index(k)
        yield alphabet[index % len(alphabet)]

Here is some pseudo code for your modified implementation:

convert all text (plain, key) to upper case
create a list to hold output
split plain into blocks of length len(key)
for each block in plain:
    if it's the first block, use key to encode
    otherwise, use the last block of encoded text in output 

Post a Comment for "Modified Vigenere Cipher In Python - Alphabet"