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: ,
- 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 paraqiaosão 4-2-1-3. - 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 | , |
- Como a última linha está faltando uma letra, o caractere de preenchimento é usado para preenchê-la.
- 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 |
- 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:
- Primeiro, verificamos se o
textde entrada está vazio. Se estiver, retornamosNone. - Definimos a
keycomo"qiao"e opadding_charcomo",". - Criamos uma lista
key_orderpara 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. - Preenchemos o
textde entrada com opadding_charpara garantir que o comprimento do texto seja um múltiplo do comprimento da chave. - Criamos uma matriz a partir do texto preenchido, onde cada linha representa uma linha do texto e cada coluna representa um caractere na linha.
- Reorganizamos as colunas da matriz de acordo com a
key_orderque calculamos anteriormente. - 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.



