Exemplo n.º 1
0
class Vegenere:

    def __init__(self):
        self.helper = Helper()

    def encrypt(self, plaintext, key):
        plaintext = self.helper.format(plaintext)
        key = self.helper.format(key)
        kryptotext = ''

        for index, char in enumerate(plaintext):
            plain_char = ord(char) - 65
            key_char = ord(key[index % len(key)]) - 65
            krypto_char = ((plain_char + key_char) % 26) + 65
            kryptotext += unichr(krypto_char)

        return kryptotext

    def decrypt(self, kryptotext, key):
        kryptotext = self.helper.format(kryptotext)
        key = self.helper.format(key)
        plaintext = ''

        for index, char in enumerate(kryptotext):
            krypto_char = ord(char) - 65
            key_char = ord(key[index % len(key)]) - 65
            plain_char = ((krypto_char - key_char) % 26)

            if plain_char < 0:
                plain_char += 26

            plain_char += 65
            plaintext += unichr(plain_char)

        return plaintext
Exemplo n.º 2
0
    def _char_frequency(text):
        frequencies = [0 for i in range(26)]
        text = Helper.format(text)

        for index, char in enumerate(text):
            frequencies[ord(char) - 65] += 1

        return frequencies
Exemplo n.º 3
0
    def _find_positions(self, krypto_text):
        krypto_text = Helper.format(krypto_text)
        positions = {}

        for i in range(len(krypto_text)-2):
            sub = krypto_text[i:i+3]
            if sub in positions:
                positions[sub].append(i+1)
            else:
                positions[sub] = [i+1]

        return self._remove_zero_or_one_occurancies(positions)