Exemple #1
0
def decodificar_UTF8_para_texto(codigo_UTF8):
    tamanho_codigo_UTF8 = len(codigo_UTF8)
    if not codigo_UTF8 or tamanho_codigo_UTF8 % 8 != 0:
        return dicionarios.retorna_erro_mensagem()

    texto_decodicado = ''
    i = 0
    
    while i < tamanho_codigo_UTF8:
        if codigo_UTF8[i:i+5] == '11110':
            bin_atual = codigo_UTF8[i+5:i+8] + codigo_UTF8[i+10:i+16] + codigo_UTF8[i+18:i+24] + codigo_UTF8[i+26:i+32]
            i += 32
        elif codigo_UTF8[i:i+4] == '1110':
            bin_atual = codigo_UTF8[i+4:i+8] + codigo_UTF8[i+10:i+16] + codigo_UTF8[i+18:i+24]
            i += 24
        elif codigo_UTF8[i:i+3] == '110':
            bin_atual = codigo_UTF8[i+3:i+8] + codigo_UTF8[i+10:i+16]
            i += 16
        elif codigo_UTF8[i] == '0':
            bin_atual = codigo_UTF8[i+1:i+8]
            i += 8
        else:
            return dicionarios.retorna_erro_mensagem()
        
        UNICODE_novo_caractere = bases_numericas.converter_binario_para_decimal(bin_atual, tirar_zeros_esq=False)
        if not UNICODE_novo_caractere:
            return dicionarios.retorna_erro_mensagem()
        texto_decodicado += chr(bases_numericas.converter_binario_para_decimal(bin_atual, tirar_zeros_esq=False))
    return texto_decodicado
def retornar_texto_traduzido(mensagem, funcao_tradutora):
    if not mensagem:
        return dicionarios.retorna_erro_mensagem()
    mensagem_traduzida = ''
    for numero in mensagem.split():
        valor_UNICODE = funcao_tradutora(numero)
        if not valor_UNICODE or valor_UNICODE >= utilidades_cifras.LIMITE_UNICODE_PYTHON:
            # Ocorreu um erro na troca da base númerica escolhida para a base decimal.
            return dicionarios.retorna_erro_mensagem()
        mensagem_traduzida += chr(valor_UNICODE)
    return mensagem_traduzida
def traduzir_base_64(texto):
    if not texto:
        return dicionarios.retorna_erro_mensagem()
    codigo_binario = transformar_textoBase64_em_codigo_binario(texto)
    if not codigo_binario:  # Um caractere fora da tabela da base 64 foi encontrado.
        return dicionarios.retorna_erro_mensagem()
    
    quant_de_iguais = texto.count('=')
    if quant_de_iguais == 1:
        codigo_binario = codigo_binario[:len(codigo_binario) - 2]
    elif quant_de_iguais == 2:
        codigo_binario = codigo_binario[:len(codigo_binario) - 4]

    return utf8.decodificar_UTF8_para_texto(codigo_binario)
def retornar_texto_encriptado(mensagem, funcao_encriptadora):
    if not mensagem:
        return dicionarios.retorna_erro_mensagem()
    mensagem_encriptada = ''
    for caractere in mensagem:
        mensagem_encriptada += funcao_encriptadora(ord(caractere)) + ' '
    return mensagem_encriptada.strip()
Exemple #5
0
def mensagem_nova_modo_apenas_letras(chave, mensagem):
    if not mensagem:
        return dicionarios.retorna_erro_mensagem()
    if chave:
        return cesar_troca_apenas_letras(chave, mensagem)
    else:
        return dicionarios.retorna_erro_chave()
Exemple #6
0
def mensagem_nova_modo_varios_caracteres(chave, mensagem, dic_unicode):
    if not mensagem:
        return dicionarios.retorna_erro_mensagem()
    if chave:
        return cesar_troca_varios_caracteres(chave, mensagem, dic_unicode)
    else:
        return dicionarios.retorna_erro_chave()
def mensagem_nova(chave, mensagem):
    if not mensagem:
        return dicionarios.retorna_erro_mensagem()
    if chave:
        return criar_mensagem_com_caracteres_trocados(chave, mensagem)
    else:
        return dicionarios.retorna_erro_chave()
def codificar_base_64(texto):
    if not texto:
        return dicionarios.retorna_erro_mensagem()
    texto_codificado = ''
    indice_codigo = 24
    texto_UTF8 = utf8.codificar_texto_para_UTF8(texto)
    tamanho_codigo = len(texto_UTF8)
    while indice_codigo <= tamanho_codigo:  # Construindo o texto base 64... cada loop iterando sobre 24 digitos (4 blocos de 6).
        texto_codificado += dicionario_base_64[texto_UTF8[indice_codigo - 24: indice_codigo - 18]]
        texto_codificado += dicionario_base_64[texto_UTF8[indice_codigo - 18: indice_codigo - 12]]
        texto_codificado += dicionario_base_64[texto_UTF8[indice_codigo - 12: indice_codigo - 6]]
        texto_codificado += dicionario_base_64[texto_UTF8[indice_codigo - 6: indice_codigo]]
        indice_codigo += 24
    # Finalizando o enconding... 
    n_digitos_finais = indice_codigo - tamanho_codigo
    if n_digitos_finais == 24:  # Todo o texto ja passou pelo encode, retornar o código base 64
        pass
    elif n_digitos_finais == 16:  # Para completar, faltou 16 digitos. Completar antepenultimo bloco com mais 4 zeros e adicionar 2 iguais no final.
        texto_UTF8 += '0000'
        texto_codificado += dicionario_base_64[texto_UTF8[indice_codigo - 24: indice_codigo - 18]]
        texto_codificado += dicionario_base_64[texto_UTF8[indice_codigo - 18: indice_codigo - 12]] + '=='
    else:  # Faltou 8 digitos para completar. Antepenultimo recebe 2 zeros, e bloco faltante será substituido por um "=".
        texto_UTF8 += '00'
        texto_codificado += dicionario_base_64[texto_UTF8[indice_codigo - 24: indice_codigo - 18]]
        texto_codificado += dicionario_base_64[texto_UTF8[indice_codigo - 18: indice_codigo - 12]]
        texto_codificado += dicionario_base_64[texto_UTF8[indice_codigo - 12: indice_codigo - 6]] + '='
    return texto_codificado
Exemple #9
0
def imprimir_melhor_mensagem_adivinhada_apenas_letras(mensagem):
    lista_melhor_msg_e_indice = adivinhar_cesar_apenas_letras(mensagem)
    if lista_melhor_msg_e_indice:
        print(
            dicionarios.retorna_mensagens_adivinhador_cesar(
                lista_melhor_msg_e_indice[0], lista_melhor_msg_e_indice[1]))
    else:
        print(
            dicionarios.retorna_mensagem_com_bordas(
                dicionarios.retorna_erro_mensagem(), 127))
Exemple #10
0
def codificar_texto_para_UTF8(texto):
    if not texto:
        return dicionarios.retorna_erro_mensagem()
    
    codigo_final_utf8 = ''
    for caractere in texto:
        num_binario = bases_numericas.converter_decimal_para_binario(ord(caractere))
        if len(num_binario) <= 7:
            codigo_final_utf8 += transformar_7bits_UTF8(num_binario)
        elif len(num_binario) <= 11:
            codigo_final_utf8 += transformar_11bits_UTF8(num_binario)
        elif len(num_binario) <= 16:
            codigo_final_utf8 += transformar_16bits_UTF8(num_binario)
        elif len(num_binario) <= 21:
            codigo_final_utf8 += transformar_21bits_UTF8(num_binario)
        else:  # "Passou do limite do programa" (é possível ler mais bytes, mas nesse programa não será lido...)
            return dicionarios.retorna_erro_mensagem()
            
    return codigo_final_utf8
Exemple #11
0
def imprimir_apenas_letras(mensagem):
    lista_mensagens_apenas_letras = apenas_letras(mensagem)
    if lista_mensagens_apenas_letras:
        for num_chave, mensagem in enumerate(apenas_letras(mensagem)):
            print(
                dicionarios.retorna_mensagens_forca_bruta_cesar(
                    num_chave + 1, mensagem))
    else:
        print(
            dicionarios.retorna_mensagem_com_bordas(
                dicionarios.retorna_erro_mensagem(), 127))
Exemple #12
0
def imprimir_varios_caracteres(mensagem):
    lista_mensagens_varios_caracteres = varios_caracteres(mensagem)
    if lista_mensagens_varios_caracteres:
        for num_chave, mensagem in enumerate(varios_caracteres(mensagem)):
            print(
                dicionarios.retorna_mensagens_forca_bruta_cesar(
                    num_chave + 1, mensagem))
    else:
        print(
            dicionarios.retorna_mensagem_com_bordas(
                dicionarios.retorna_erro_mensagem(), 127))
Exemple #13
0
def test_subst_simples_varios_caracteres_mensagem_invalida():
    assert subst_simples.encriptar_modo_varios_caracteres(
        ['ab', 'tg'], '') == dicionarios.retorna_erro_mensagem()
    assert subst_simples.traduzir_modo_varios_caracteres(
        ['abc', 'tg'], '') == dicionarios.retorna_erro_mensagem()
Exemple #14
0
def test_subst_simples_apenas_letras_mensagem_invalida():
    assert subst_simples.encriptar_modo_apenas_letras(
        ['ab', 'tg'], '') == dicionarios.retorna_erro_mensagem()
    assert subst_simples.traduzir_modo_apenas_letras(
        ['ab', 'tg'], '') == dicionarios.retorna_erro_mensagem()
def test_cifra_de_vigenere_apenas_letras_mensagem_invalida():
    assert cifra_de_vigenere.encriptar_modo_apenas_letras(
        ['abc'], '') == dicionarios.retorna_erro_mensagem()
    assert cifra_de_vigenere.traduzir_modo_apenas_letras(
        ['abc'], '') == dicionarios.retorna_erro_mensagem()
def test_utf8_mensagem_invalida_tamanho_invalida():
    assert utf8.decodificar_UTF8_para_texto(
        '1010101') == dicionarios.retorna_erro_mensagem()
def test_hexadecimal_traducao_invalido_2():
    assert bases_numericas.transformar_hexadecimal_para_texto('FFFFFFFFF') == dicionarios.retorna_erro_mensagem()
def test_utf8_mensagem_invalida_nao_binaria_2():
    assert utf8.decodificar_UTF8_para_texto(
        '101011ab') == dicionarios.retorna_erro_mensagem()
Exemple #19
0
def test_base64_mensagem_invalida_2():
    assert base_64.traduzir_base_64(
        '!??!') == dicionarios.retorna_erro_mensagem()
Exemple #20
0
def test_base64_mensagem_invalida_1():
    assert base_64.codificar_base_64('') == dicionarios.retorna_erro_mensagem()
Exemple #21
0
def test_cifra_de_cesar_apenas_letras_mensagem_invalida():
    assert cifra_de_cesar.encriptar_modo_apenas_letras(
        ['1'], '') == dicionarios.retorna_erro_mensagem()
    assert cifra_de_cesar.traduzir_modo_apenas_letras(
        ['1'], '') == dicionarios.retorna_erro_mensagem()
def test_utf8_mensagem_invalida_vazia():
    assert utf8.codificar_texto_para_UTF8(
        '') == dicionarios.retorna_erro_mensagem()
    assert utf8.decodificar_UTF8_para_texto(
        '') == dicionarios.retorna_erro_mensagem()
def test_octal_mensagem_invalida():
    assert bases_numericas.transformar_texto_para_octal('') == dicionarios.retorna_erro_mensagem()
    assert bases_numericas.transformar_octal_para_texto('') == dicionarios.retorna_erro_mensagem()
def test_octal_traducao_invalido_2():
    assert bases_numericas.transformar_octal_para_texto('77777777777') == dicionarios.retorna_erro_mensagem()
def test_utf8_mensagem_invalida_codificacao_incorreta():
    assert utf8.decodificar_UTF8_para_texto(
        '10101110') == dicionarios.retorna_erro_mensagem()
Exemple #26
0
def test_cifra_de_cesar_varios_caracteres_mensagem_invalida():
    assert cifra_de_cesar.encriptar_modo_varios_caracteres(
        ['1'], '') == dicionarios.retorna_erro_mensagem()
    assert cifra_de_cesar.traduzir_modo_varios_caracteres(
        ['1'], '') == dicionarios.retorna_erro_mensagem()
def test_binario_traducao_invalido_1():
    assert bases_numericas.transformar_binario_para_texto('1111210') == dicionarios.retorna_erro_mensagem()