Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Key trimming solution in Uncategorized category for Vigenere Cipher by Rounin
import functools
def tonum(text):
return list(map(lambda x: ord(x) - ord('A'), text))
def totext(num):
return ''.join(map(lambda x: chr(x + ord('A')), num))
def trimkey(key):
for length in range(1, len(key)+1):
subkey = list()
while len(subkey) < len(key):
subkey += key[0:length]
if subkey[0:len(key)] == key:
return key[0:length]
def decrypt(encrypted, key):
return map(lambda pair: (pair[0] - pair[1] + 26) % 26, zip(tonum(encrypted), key))
def decode_vigenere(old_decrypted, old_encrypted, new_encrypted):
key = trimkey(list(decrypt(old_encrypted, tonum(old_decrypted))))
new_key = key.copy()
while len(new_key) < len(new_encrypted):
new_key += key
return totext(decrypt(new_encrypted, new_key))
#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
decode_vigenere(u"ANDNOWFORSOMETHINGCOMPLETELYDIFFERENT", u"PLWUCJUMKZCZTRAPBTRMFWZRICEFRVUDXYSAI", u"XKTSIZQCKQOPZYGKWZDIBZZRTNTSZAXEAAOASGPVFXPJEKOLXANARBLLMYSRHGLRWCPLWQIZEGEPYRIMIYSFHUBSRSAMPLFFXNNACALMFLBFRJHAVVCETURUPLZHFBJLWPBOPPL")
assert decode_vigenere('DONTWORRYBEHAPPY',
'FVRVGWFTFFGRIDRF',
'DLLCZXMFVRVGWFTF') == "BEHAPPYDONTWORRY", "CHECKIO"
assert decode_vigenere('HELLO', 'OIWWC', 'ICP') == "BYE", "HELLO"
assert decode_vigenere('LOREMIPSUM',
'OCCSDQJEXA',
'OCCSDQJEXA') == "LOREMIPSUM", "DOLORIUM"
Sept. 29, 2017