Skip to content

No âmbito da disciplina de Criptografia foi-nos requisitado a realização de um trabalho de grupo centrado na realização de um algoritmo de encriptação de forma a refletir todo o conhecimento adquirido ao longo das aulas realizadas.

License

Notifications You must be signed in to change notification settings

andrenevesgomes/Criptografia

Repository files navigation

Website GitHub Release Date


Logo Projecto

Criptografia

Criação do algoritmo para a cifra Cítala Espartana.

Explorar os docs »

Ver Demo · Reportar Bug

Tabela de Conteúdos

Sobre o Projeto

HomePage

No âmbito da disciplina de Criptografia foi-nos requisitado a realização de um trabalho de grupo centrado na realização de um algoritmo de encriptação de forma a refletir todo o conhecimento adquirido ao longo das aulas realizadas.

Desenvolvimento

Definição:

Uma cítala é um sistema de criptografia utilizado pelos éforos espartanos para envio de mensagens secretas.

Funcionamento:

O sistema consistia em duas varas da mesma espessura que estavam cada uma na posse de um dos participantes na comunicação. Para enviar uma mensagem era enrolada uma tira de forma espiral a um dos bastões e era escrita a mensagem longitudinalmente, de forma que em cada volta da tira aparecesse uma letra de cada vez. Uma vez escrita a mensagem, a tira era desenrolada e era enviada ao recetor, que só tinha que a enrolar no bastão gémeo para ler a mensagem original.

Utilização:

Os gregos antigos, e em particular os espartanos, utilizaram este sistema de cifra de transposição para comunicar nas campanhas militares.

O Algorítmo:

Quando se trata de encriptar uma mensagem com este mecânismo, podemos pensar na cítala como uma matriz retangular da qual conhecemos uma das suas medidas, por exemplo, o comprimento dado ao número de voltas que a fita dá à haste. Para simplificar, iremos denominar este parâmetro por L.

Com base no parâmetro L, iremos gerar uma matriz com a dimensão N x L, onde N é derivado de L e do comprimento da mensagem. Prosseguimos para preencher a matriz longitudinalmente, saltando para uma nova linha à medida que a anterior é concluída, até termos terminado a mensagem. Em seguida, procedemos à transposição da matriz e recuperamos o texto longitudinalmente, mantendo os espaços, se houver.

Por exemplo, dado o texto WE ARE UNDER ATTACK e um comprimento de 4, a matriz inicial seria a seguinte:

| W | E |   | A |
| R | E |   | U |
| N | D | E | R |
| A | T | T | A |
| C | K |   |   |

Depois de transposta, iria ficar da seguinte forma:

| W | E | E | T |
| E |   | R | A |
|   | U |   | C |
| A | N | A | K |
| R | D | T |   |

Portanto, nossa mensagem encriptada seria WEETE RA U CANAKRDT.

Para decifrar a mensagem, o processo seria o mesmo, mas ao contrário: partimos de uma matriz de dimensões L x N, seguindo a mesma lógica em que N é calculado com base no parâmetro L e no comprimento do mensagem.

Seguindo a mesma metodologia, a matriz é preenchida, transposta e o texto recuperado longitudinalmente, respeitando os espaços.

Pseudo-Código

CÓDIGO ENCRIPTAR 🔒

/// <summary>
/// Esta função irá permitir a encriptação de uma frase que o user insira.
/// </summary>
/// <param name="plainText">Texto que o user irá inserir na textbox</param>
/// <param name="numOfRows">Comprimento dado ao número de voltas que a fita dá na haste</param>
/// <returns>Irá retornar o texto encriptado</returns>

public static string ScytaleEncode(string plainText, int numOfRows) {
  string encodedText = "";
  if (numOfRows >= plainText.Length || numOfRows <= 0) {
    return plainText;
  } else {
    while (plainText.Length % numOfRows != 0) {
      plainText += " ";
    }

    int numOfCols = plainText.Length / numOfRows;
    for (int i = 0; i < numOfCols; i++) {
      for (int y = i; y < plainText.Length; y += numOfCols) {
        encodedText += plainText[y];
      }
    }
  }
  return encodedText;
}

CÓDIGO DESENCRIPTAR 🔓

/// <summary>
/// Esta função irá permitir a desencriptação de uma frase que o user insira.
/// </summary>
/// <param name="encodedString">Texto que o user irá inserir na textbox</param>
/// <param name="numOfRows">Comprimento dado ao número de voltas que a fita dá na haste</param>
/// <returns>Irá retornar o texto desencriptado</returns>

public static string ScytaleDecode(string encodedString, int numOfRows) {
  string decodedString = " ";
  int numOfCols = encodedString.Length / numOfRows;
  decodedString = ScytaleEncode(encodedString, numOfCols);
  return decodedString;
}

Algoritmo em funcionamento

Experimentar a Cítala

Bibliotecas Usadas

Conclusão

Com este trabalho ficámos a conhecer a cifra Scitala Espartana. Para este exercício, conhecimentos de programação não eram suficientes, foi necessário entender a cifra para que fosse possível “traduzi-la” para uma linguagem de programação. Foi bastante interessante transformar um objeto físico de criptografia num algoritmo, e ajudou a solidificar o nosso pensamento lógico.

Bibliografia

Licença

All code from this project is licensed under a MIT License. If a picture is originally taken or made by us, then it is copyrighted. Otherwise, it keeps the original license. Everything else is copyrighted with © all rights reserved.

About

No âmbito da disciplina de Criptografia foi-nos requisitado a realização de um trabalho de grupo centrado na realização de um algoritmo de encriptação de forma a refletir todo o conhecimento adquirido ao longo das aulas realizadas.

Topics

Resources

License

Stars

Watchers

Forks