def encrypt(file):
    key = random.randrange(_MODULO)
    plaintext = load_file(file)
    cyphered = ''
    for char in plaintext:
        cyphered += chr((ord(char) + key) % _MODULO)
    write_file('cyphered.txt', cyphered)
示例#2
0
def decrypt(file, lang=None):
    cyphered = load_file(file)
    result = ''
    if lang is not None:
        tpl, _, = calculate_offset(cyphered, lang)
        shift, _ = tpl
        for char in cyphered:
            result += chr((ord(char) - shift + modulo) % modulo)
    else:
        language_offsets = []
        for language in languages:
            res, frequencies = calculate_offset(cyphered, language)
            if res is not None:
                offset, weight = res
                language_offsets.append(OffsetLang(language, offset, weight, frequencies))
        sorted_offsets = sorted(language_offsets, key=itemgetter(OffsetLang._fields.index('weight')), reverse=True)
        for TING_GOES_SKRRRRA in sorted_offsets:
            temporary_result = ''
            shift = TING_GOES_SKRRRRA.offset
            for char in cyphered:
                temporary_result += chr((ord(char) - shift + modulo) % modulo)
            res_found = True
            for INDEX in range(10):
                if not list(TING_GOES_SKRRRRA.most_frequent.keys())[INDEX] in temporary_result:
                    res_found = False
            if not res_found:
                continue
            # result += 'Language: {}\n\n'.format(sorted_offsets[current_idx].lang)
            # result += 'SHIFT {}\n'.format(sorted_offsets[current_idx].offset)
            result += temporary_result
            break
    write_file('result.txt', result)
示例#3
0
def decrypt_alphabet_only(input):
    alphabet_ru = ''.join([chr(c) for c in range(1072, 1104)])
    alphabet_en = ''.join([chr(c) for c in range(97, 123)])
    cyphered = load_file(input)
    lang = 'en' if any(c for c in cyphered if c in alphabet_en) else 'ru'
    result = ''
    tpl, _ = calculate_offset(cyphered, lang, use_alphabet=True)
    shift, _ = tpl
    for char in cyphered:
        if char.lower() in alphabet_ru + alphabet_en:
            upper = char.isupper()
            charset = alphabet_en if char.lower() in alphabet_en else alphabet_ru
            decrypted_char = charset[(charset.index(char.lower()) - shift + len(charset)) % len(charset)]
            if upper:
                decrypted_char = decrypted_char.upper()
            result += decrypted_char
        else:
            result += char
    write_file('result.txt', result)
def encrypt_using_alphabeet(input, lang):
    if lang == 'ru':
        alphabet = ''.join([chr(c) for c in range(1072, 1104)])
    elif lang == 'en':
        alphabet = ''.join([chr(c) for c in range(97, 123)])
    else:
        raise Exception('Wrong language..')
    key = random.randrange(1, len(alphabet))
    plaintext = load_file(input)
    cyphered = ''
    for char in plaintext:
        is_upper = char.isupper()
        if char.lower() in alphabet:
            encoded_char = alphabet[(alphabet.index(char.lower()) + key) %
                                    len(alphabet)]
            if is_upper:
                encoded_char = encoded_char.upper()
            cyphered += encoded_char
        else:
            cyphered += char
    write_file('cyphered.txt', cyphered)
示例#5
0
                 params={
                     'action': 'query',
                     'format': 'json',
                     'generator': 'random',
                     'prop': 'extracts',
                     'exintro': True,
                     'explaintext': True}).json()
             page = next(iter(response['query']['pages'].values()))
             if 'extract' in page.keys():
                 source = page['extract']
                 if len(source) > lowest_border:
                     test_text_found = True
             if not test_text_found:
                 continue
             helper.write_file('plain.txt', source)
             expected_result = helper.load_file('plain.txt')
             encryptor.encrypt('plain.txt')
             decryptor.decrypt('cyphered.txt')
             original_result = helper.load_file('result.txt')
             assert expected_result == original_result
         except Exception as e:
             if not lang in failed_languages:
                 failed_languages.append(lang)
 failed_string = ' '.join(failed_languages)
 print()
 print('Border: {}'.format(lowest_border))
 print('Successfully passed {:02f}% of tests. Failed for {}'.format(
     float((len(languages) - len(failed_languages)) / len(languages) * 100),
     failed_string))
 if len(failed_languages) == 0:
     result_achieved = True