Implementando Criptografia por Permutação de Colunas em Python

PythonBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como implementar o algoritmo de Criptografia por Permutação de Colunas em Python. A Criptografia por Permutação de Colunas é um método de criptografar texto simples reorganizando as colunas de uma matriz formada a partir do texto de entrada, com base em uma palavra-chave.

👀 Pré-visualização

## Sample 1
text = "welcometolq"; encryption_text = "ct,emlwooleq"
## Sample 2
text = "welcometolq "; encryption_text = "ct emlwooleq"
## Sample 3
text = "w"; encryption_text = ",,w,"
## Sample 4
text = None; encryption_text = None

🎯 Tarefas

Neste projeto, você aprenderá:

  • O conceito básico de Criptografia por Permutação de Colunas
  • Como implementar o algoritmo de Criptografia por Permutação de Colunas em Python
  • Como testar o algoritmo de criptografia com exemplos de entrada

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Compreender os princípios da Criptografia por Permutação de Colunas
  • Implementar o algoritmo de Criptografia por Permutação de Colunas em Python
  • Criptografar e descriptografar texto usando o método de Criptografia por Permutação de Colunas

Entenda a Criptografia por Permutação de Colunas

Nesta etapa, você aprenderá o conceito básico da Criptografia por Permutação de Colunas e como ela funciona.

A Criptografia por Permutação de Colunas é um método de criptografar texto simples escrevendo-o linha por linha com um número fixo de caracteres por linha (o número de letras únicas na chave, que geralmente é uma palavra sem letras repetidas). Se o número de caracteres na última linha for menor que o número fixo de caracteres por linha, símbolos especiais são usados para preencher a linha, formando uma matriz. Em seguida, as colunas da matriz são reorganizadas de acordo com a ordem alfabética das letras na chave. Finalmente, as colunas reorganizadas são lidas uma por uma, resultando no texto cifrado (ciphertext).

Por exemplo, vamos considerar o seguinte texto simples, chave e caractere de preenchimento:

Texto simples: welcometolq

Chave: qiao

Caractere de preenchimento: ,

  1. O comprimento da chave qiao é 4. A chave é então atribuída a números na ordem alfabética das 26 letras do inglês, com números mais baixos atribuídos às letras que aparecem mais cedo na ordem. Os números atribuídos para qiao são 4-2-1-3.
  2. O texto simples é dividido em linhas, cada uma consistindo em 4 (o comprimento da chave) letras, resultando em 4 colunas:
1 2 3 4
w e l c
o m e t
o l q ,
  1. Como a última linha está faltando uma letra, o caractere de preenchimento é usado para preenchê-la.
  2. A ordem das colunas na matriz é reorganizada de acordo com a ordem alfabética da chave:
4 2 1 3
c e w l
t m o e
, l o q
  1. O conteúdo é então lido uma coluna por vez, resultando no texto cifrado: ct,emlwooleq.

Implemente a Criptografia por Permutação de Colunas

Nesta etapa, você implementará o algoritmo de Criptografia por Permutação de Colunas em Python.

Abra o arquivo column_permutation.py e localize a função column_permutation_encryption(text). Esta função recebe um trecho de texto como entrada, usa a chave qiao e o caractere de preenchimento , (vírgula) para realizar a criptografia por permutação de colunas no conteúdo e retorna o texto cifrado (ciphertext).

Aqui está o código que você precisa implementar:

def column_permutation_encryption(text: str) -> str:
    if not text:
        return None

    key = "qiao"
    padding_char = ","
    key_order = []
    sorted_key = sorted(key)
    for i in range(0, len(key)):
        key_order.append(sorted_key.index(key[i]))
    padded_text = text.ljust(len(key) * ((len(text) - 1) // len(key) + 1), padding_char)
    matrix = [
        padded_text[i : i + len(key)] for i in range(0, len(padded_text), len(key))
    ]
    encrypted_matrix = [[row[i] for i in key_order] for row in matrix]

    encryption_text: str = "".join(
        ["".join(column) for column in zip(*encrypted_matrix)]
    )
    return encryption_text

Vamos analisar o código passo a passo:

  1. Primeiro, verificamos se o text de entrada está vazio. Se estiver, retornamos None.
  2. Definimos a key como "qiao" e o padding_char como ",".
  3. Criamos uma lista key_order para armazenar a ordem alfabética das letras na chave. Fazemos isso primeiro ordenando a chave e, em seguida, encontrando o índice de cada letra na chave ordenada.
  4. Preenchemos o text de entrada com o padding_char para garantir que o comprimento do texto seja um múltiplo do comprimento da chave.
  5. Criamos uma matriz a partir do texto preenchido, onde cada linha representa uma linha do texto e cada coluna representa um caractere na linha.
  6. Reorganizamos as colunas da matriz de acordo com a key_order que calculamos anteriormente.
  7. Finalmente, lemos as colunas reorganizadas uma por uma e as concatenamos para formar o texto cifrado.

Teste a Criptografia por Permutação de Colunas

Agora que você implementou o algoritmo de Criptografia por Permutação de Colunas, vamos testá-lo com algumas entradas de exemplo.

Adicione o seguinte código ao final do arquivo column_permutation.py:

if __name__ == "__main__":
    txt = input()
    print(column_permutation_encryption(txt))

Este código solicitará ao usuário que insira um trecho de texto e, em seguida, chamará a função column_permutation_encryption() com o texto de entrada e imprimirá o texto cifrado resultante.

Salve o arquivo e execute o seguinte comando no terminal:

python3 column_permutation.py

Insira alguns textos de exemplo e observe os textos cifrados resultantes. Você pode usar os exemplos fornecidos no desafio original como referência:

## Exemplo 1
text = "welcometolq"
encryption_text = "ct,emlwooleq"
## Exemplo 2
text = "welcometolq "
encryption_text = "ct emlwooleq"
## Exemplo 3
text = "w"
encryption_text = ",,w,"
## Exemplo 4
text = None
encryption_text = None

Parabéns! Você implementou com sucesso o algoritmo de Criptografia por Permutação de Colunas em Python.

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar