Buscar

APS CRIPTOGRAFIA EM PYTHON

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 40 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 40 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 40 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

2
Universidade Paulista
Ciência da Computação
Atividade Prática Supervisionada
ALGORÍTMOS DE CRIPTOGRAFIA
 Nome:
					BAURU
					2019/2
Sumário
1. Introdução......................................................................................................3
1.2 Objetivo do trabalho.....................................................................................4 
2 Referencial Teórico.........................................................................................5
2.1 História da Criptografia................................................................................5
2.2 Cifras e Códigos..........................................................................................7 
2.3 Chave Criptográfica.....................................................................................8
2.4 Criptografia Simétrica..................................................................................9
2.5 Criptografia Assimétrica.............................................................................10
2.6 Criptografia Moderna..................................................................................11
2.7 Criptografia Quântica..................................................................................11
2.8 Assinatura Digital........................................................................................12 
2.9 Algoritmos de Criptografia..........................................................................12 
2.9.1 Cifra de César..........................................................................................13
2.9.2 Cifras de Vigenère...................................................................................15
2.9.3 Máquina de Enigma.................................................................................17
2.9.4 Atbash......................................................................................................18
2.9.5 RSA..........................................................................................................19
2.9.6 DES..........................................................................................................19
2.9.7 3DES........................................................................................................20
2.9.8 DESX........................................................................................................20
2.9.9 AES...........................................................................................................20
2.9.10 Camellia..................................................................................................21
2.9.11 Blowfish...................................................................................................21 
2.9.12 Twofish....................................................................................................21
2.9.13 SAFER....................................................................................................22
3 Desenvolvimento............................................................................................23
4 Resultados e Discussão.................................................................................28 
5 Considerações Finais.....................................................................................30
Referências Bibliográficas.................................................................................31 
Código Fonte.....................................................................................................34	 
Fichas de Atividades Práticas Supervisionadas................................................38
1 Introdução
	Criptografia (Do Grego kryptós, "escondido", e gráphein, "escrita") é o estudo dos princípios e técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário (detentor da "chave secreta"), o que a torna difícil de ser lida por alguém não autorizado. Assim sendo, só o receptor da mensagem pode ler a informação com facilidade. Há dois tipos de chaves criptográficas: chaves simétricas e chaves assimétricas. Uma informação não-cifrada que é enviada de uma pessoa (ou organização) para outra é chamada de "texto claro" (plaintext). Cifragem é o processo de conversão de um texto claro para um código cifrado e decifragem é o processo contrário, de recuperar o texto original a partir de um texto cifrado (FIARRESGA; OLIVEIRA; SILVA, 2010). 
A criptografia é um ramo especializado da teoria da informação com muitas contribuições de outros campos da matemática e do conhecimento, incluindo autores como Maquiavel, Sun Tzu e Karl von Clausewitz. A criptografia moderna é basicamente formada pelo estudo dos algoritmos criptográficos que podem ser implementados em computadores. 
Antigamente, a cifragem era utilizada na troca de mensagens, sobretudo em assuntos ligados à guerra (no intuito de o inimigo não descobrir a estratégia do emissor da mensagem, caso se apoderasse dela), ao amor (para que os segredos amorosos não fossem descobertos pelos familiares) e à diplomacia (para que facções rivais não estragassem os planos de acordos diplomáticos entre nações). O primeiro uso documentado da criptografia foi em torno de 1900 a.c., no Egito, quando um escriba usou hieróglifos fora do padrão numa inscrição. 
Desde os primórdios passando depois pelo criptoanalistas britânicos na quebra dos códigos e cifras alemãs durante a I Guerra Mundial, depois na II Guerra Mundial, com as máquinas de codificação mecânica e eletromecânica, como a famosa Máquina de Enigma entre vários outros exemplos. 
Desde a Segunda Guerra Mundial o uso da matemática em criptografia e criptoanálise tem avançado, porém, a utilização mais eficaz da criptografia para diversas aplicações usuais, só foi possível como uso dos computadores e da Internet 4 como um meio de comunicação. Antes a criptografia era utilizada apenas por governos ou grandes empresas. 
Atualmente, com o avanço da tecnologia e o aumento do compartilhamento de informações a criptografia é extremamente necessária como uma forma de segurança de informação, por exemplo para: proteger arquivos, contra fraudes e tentativas de invasão, enviar e-mail de forma mais segura, proteger senhas, etc. Garantindo assim que apenas o real destinatário da informação possa ter o acesso permitido. Hoje existem diversas técnicas e algoritmos específicos de criptografia, e seu estudo é constantemente incentivado pelos governos em diversos países e também por outras diversas empresas de segurança de informação.
1.2 Objetivo do trabalho
O objetivo deste trabalho consiste em estudar os algoritmos de criptografia e toda teoria computacional envolvida, entendendo o processo de conversão de um texto claro para um código cifrado e a decifragem que é o processo contrário, de recuperar o texto original a partir de um texto cifrado. Entender também a aplicação e desempenho de cada algoritmo e técnicas envolvidas. 
Após pesquisa o grupo escolheu dois algoritmos de criptografia para implementar e testar o desempenho dos algoritmos escolhidos. Dentre os vários algoritmos de criptografia existentes como os de chaves simétricas e chaves assimétricas, especificamente neste trabalho foram escolhidos, Cifras de César e Cifra Atbash, utilizando chaves simétricas.
O capítulo 2 a seguir aborda o referencial teórico. Após o referencial teórico, o capítulo 3 apresenta o desenvolvimento dos algoritmos escolhidos pelo grupo, depois no capítulo 4 os resultados e discussões, isto é, como foram aplicados os testes e sobre o desempenho obtido pelo algoritmo, etc. No capítulo 5 o grupo apresentará as 5 considerações finais e o seu entendimento sobre tudo que foi feito. E finalmente as referências para esta pesquisa e o código dos algoritmos desenvolvidos como anexo.
2 Referencial Teórico
Este capítulo aborda a histórica e conceitos principais sobre criptografia eos algoritmos de criptografia escolhidos pelo grupo e toda teoria computacional envolvida nos mesmos.
2.1 História da Criptografia
	A criptografia, ao contrário do que muitos pensam, não é um recurso que passou a ser usado recentemente, mas segundo a história, vem se aprimorando desde épocas clássicas, como no uso de hieróglifos, onde era necessária uma interpretação para entender a mensagem, até os dias de hoje. Nessa edição abordaremos um pouco da criptografia sobre uma perspectiva histórica e sua relevância até os dias de hoje.
A criptografia é a arte de cifrar/codificar uma mensagem como mecanismo de segurança. A história da criptografia começa há milhares de anos, com os Hebreus a 600 a.C., por meio de cifras de substituição monoalfabéticas (onde um símbolo do alfabeto é substituído por outro símbolo no alfabeto cifrado), como por exemplo, a cifra Atbash, que consiste na substituição da primeira letra do alfabeto pela última, da segunda pela penúltima, e assim por diante. Com o início das pesquisas sobre criptoanálise por volta de 800 d.C. O matemático árabe Ibrahim Al-Kadi inventou a técnica de análise de frequência para quebrar esse tipo de cifra. Ele também expôs métodos de cifragem como, por exemplo, a criptoanálise de certas cifragens e a análise estatística de letras e combinações de letras em árabe.
Até o início da primeira guerra mundial, nada de inovador havia sido desenvolvido no campo de criptografia, até que Alexander´s Weekly escreveu um ensaio sobre métodos de criptografia, que se tornou útil como uma introdução para os criptoanalistas britânicos na quebra dos códigos e cifras alemães durante a I Guerra Mundial; e escreveu uma história famosa, O Escaravelho de Ouro, um conto ambientado no século XIX onde a criptoanálise era um elemento de destaque.
Além de ser um importante instrumento de quebra de códigos navais alemães, que chegaram a decidir o destino de batalhas, a contribuição mais importante do uso de seus conceitos, foi decodificar o telegrama de Zimmermann, enviado ao embaixador alemão no México, Heinrich Von Eckardt, instruindo-o a se aproximar do governo mexicano e propor uma aliança militar contra os EUA, em troca ele prometia ao México terras norte-americanas, caso o país aceitasse o acordo. O telegrama foi interceptado pela Inglaterra e enviado ao governo norte americano, o que apressou a entrada dos EUA na primeira guerra mundial.
Durante a segunda guerra mundial, os alemães usaram uma máquina eletromecânica para criptografar e descriptografar, denominada de Enigma. Logo após o estopim da segunda guerra mundial, um grupo de criptógrafos britânicos (alguns matemáticos e mestres em xadrez, tais como
Newman e Alan Turing, o pai da computação moderna) conseguiu quebrar as cifras da Enigma e decifrar mensagens secretas dos nazistas. Os militares alemães implantaram maquinas usando one-time pad (cifra de chave única), um algoritmo de criptografia onde o texto é combinado com uma chave aleatória; enquanto isso, os ingleses criaram o primeiro computador digital programável, o Colossus, para ajudar com sua criptoanálise. Agentes britânicos do SOE usavam inicialmente "cifras poema" (poemas memorizados eram as chaves de encriptação/desencriptação), mas, mais tarde, durante a Segunda Guerra, eles modificaram para o one-time pad.
Durante a chamada "Guerra Fria", entre Estados Unidos e União Soviética, foram criados e utilizados diversos métodos para esconder mensagens com estratégias e operações. Desses esforços, surgiram outros tipos de criptografia, tais como: por chave simétrica, onde existe uma chave com um segredo e essa chave é compartilhada pelos interlocutores; por chave assimétrica, onde existem 2 chaves, uma pública e uma privada, a chave privada é usada para cifrar a mensagem, com isso garante-se que apenas o dono da chave poderia tê-la editado; por hash e até a chamada criptografia quântica, que se encontra, hoje, em desenvolvimento. (ANDRADE, 2013).
Um exemplo de criptografia e sustentabilidade é a restrição de acesso a uma área contaminada ambientalmente que contenha riscos a saúde pública como um navio que foi aprendido pela guarda costeira brasileira por transportar lixo tóxico da Ásia para a região norte do Brasil. O acesso à tripulação, assim como a todo conteúdo tóxico radiativo, deverá ser controlado. Somente inspetores devidamente trajados com roupas especiais poderão adentrar no navio e ainda terão que digitar uma frase ou senha a qual será criptografada e descriptografada.
2.2 Cifras e Códigos
	A cifra é um ou mais algoritmos que cifram e decifram um texto. A operação do algoritmo costuma ter como parâmetro uma chave criptográfica. Tal parâmetro costuma ser secreto (conhecido somente pelos comunicantes). A cifra pode ser conhecida, mas não a chave; assim como se entende o mecanismo de uma fechadura comum, mas não se pode abrir a porta sem uma chave real.
Na linguagem não-técnica, um Código secreto é o mesmo que uma cifra. Porém, na linguagem especializada os dois conceitos são distintos. Um código funciona manipulando o significado - que é o conceito, normalmente pela substituição simples de palavras ou frases. Uma cifra, ao contrário, trabalha com o significante - que é a forma, da representação da mensagem (letras, grupos de letras ou, atualmente, bits).
Por exemplo, um código seria substituir a frase "Atacar imediatamente" por "Mickey Mouse". Uma cifra seria substituir essa frase por "sysvst ozrfosyszrmyr". No Dia D, por exemplo, as praias de desembarque não eram conhecidas pelo seu nome próprio, mas pelos seus códigos (Omaha, Juno, etc.).
Basicamente, códigos não envolvem chave criptográfica, apenas tabelas de substituição ou mecanismos semelhantes. Códigos podem ser então encarados como cifras cuja chave é o próprio conhecimento do mecanismo de funcionamento da cifra. (WIKIPEDIA, 2019).
2.3 Chave Criptográfica
	Uma chave é um pedaço de informação que controla a operação de um algoritmo de criptografia. Na codificação, uma chave especifica a transformação do texto puro em texto cifrado, ou vice-versa, durante a decodificação. Chaves são também usadas em outros algoritmos criptográficos, tais como esquemas de assinatura digital e funções hash (também conhecidas como MAC), algumas vezes para autenticação.
Para um algoritmo bem projetado, cifrar o mesmo texto, mas com uma chave diferente deverá produzir um texto cifrado totalmente diferente. Igualmente, decifrar o texto cifrado com a chave errada deverá produzir um texto aleatório ininteligível. Se a chave de decriptação for perdida, o dado cifrado praticamente não pode ser recuparado pelo mesmo algoritmo de criptografia.
As chaves usadas na criptografia de chave pública têm uma certa estrutura matemática. Por exemplo, as chaves públicas usadas no sistema RSA são o produto de dois números primos. Por isso, sistemas de chave pública requerem chaves maiores do que os sistemas simétricos para um nível equivalente de segurança. 3072bits é o tamanho de chave sugerido para sistemas baseados em fatoração e algoritmos discretos inteiros que visam ter segurança equivalente a da cifra simétrica de 128bits. A criptografia de curva elíptica (CCE) pode permitir chaves de tamanhos menores para uma segurança equivalente, mas estes algoritmos são conhecidos há pouco tempo e, pelas estimativas atuais para a dificuldade de se encontrar suas chaves, eles não devem sobreviver. Recentemente, uma mensagem codificada usando uma chave de 109bits do algoritmo de curva elíptica foi quebrada por força bruta. A regra atual é usar uma chave de CCE com o dobro da segurança da chave simétrica para o nível desejado. Exceto para o one time pad aleatório, a segurança desses sistemas não foi provada matematicamente. Portanto, um ponto fraco teórico poderia fazer de tudo que você codificou um livro aberto. Esta é uma outra razão para se valorizar a escolha de chaves longas. (WIKIPEDIA, 2019).
2.4 Criptografia Simétrica
	A criptografia simétrica usa a mesma chave tanto para criptografar como para descriptografar dados. Os algoritmosque são usados para a criptografia simétrica são mais simples do que os algoritmos usados na criptografia assimétrica. Em função desses algoritmos mais simples, e porque a mesma chave é usada tanto para criptografar como para descriptografar dados, a criptografia simétrica é muito mais rápida que a criptografia assimétrica. Portanto, a criptografia simétrica é adequada à criptografia e à descriptografia de uma grande quantidade de dados.
Uma das principais desvantagens da criptografia simétrica é o uso da mesma chave tanto para criptografar como para descriptografar os dados. Por isso, todas as partes que enviam e recebem os dados devem conhecer ou ter acesso à chave de criptografia. Esse requisito cria um problema de gerenciamento de segurança e problemas de gerenciamento de chave que uma organização deve considerar em seu ambiente. Um problema de gerenciamento de segurança existe porque a organização deve enviar essa chave de criptografia a todos que requisitarem acesso aos dados criptografados. Os problemas de gerenciamento de chaves que uma organização deve considerar incluem a geração, a distribuição, o backup, a nova geração e o ciclo de vida da chave.
A criptografia simétrica fornece autorização para dados criptografados. Por exemplo, ao usar a criptografia simétrica, uma organização pode estar razoavelmente certa de que apenas as pessoas autorizadas a acessar a chave de criptografia compartilhada podem descriptografar o texto codificado. No entanto, a criptografia simétrica não fornece não-repúdio. Por exemplo, em um cenário em que vários grupos têm acesso à chave de criptografia compartilhada, a criptografia simétrica não pode confirmar o grupo específico que envia os dados. Os algoritmos de criptografia usados na criptografia simétrica incluem o seguinte: RC2 (128 bits), 3DES (Triple Data Encryption Standard, Padrão triplo de criptografia de dados), AES (Padrão de criptografia avançada). (GALVÃO, 2007).
2.5 Criptografia Assimétrica
	A criptografia assimétrica usa duas chaves diferentes, porém matematicamente relacionadas, para criptografar e descriptografar dados. Essas chaves são conhecidas como chaves privadas e chaves públicas. Em conjunto, essas chaves são conhecidas como par de chaves. A criptografia assimétrica é considerada mais segura do que a criptografia simétrica, porque a chave usada para criptografar os dados é diferente da que é usada para descriptografá-los. Contudo, como a criptografia assimétrica usa algoritmos mais complexos do que a simétrica, e como a criptografia assimétrica usa um par de chaves, o processo de criptografia é muito mais lento quando uma organização usa a criptografia assimétrica do que quando usa a simétrica.
Com a criptografia assimétrica, somente uma parte mantém a chave privada. Essa parte é conhecida como o assunto. Todas as outras partes podem acessar a chave pública. Os dados criptografados por meio da chave pública só podem ser descriptografados com o uso da chave privada. Por outro lado, os dados criptografados por meio da chave privada só podem ser descriptografados com o uso da chave pública. Por conseguinte, esse tipo de criptografia fornece confidencialidade e não-repúdio.
Uma organização pode usar esse tipo de criptografia para fornecer autorização, usando a chave pública para criptografar dados. Essa chave é disponibilizada publicamente. Desse modo, qualquer um pode criptografar os dados. No entanto, como apenas o assunto mantém a chave privada, a organização pode estar razoavelmente certa de que apenas o destinatário pretendido pode descriptografar e exibir os dados criptografados.
Uma organização pode usar esse tipo de criptografia para fornecer autenticação, usando a chave privada para criptografar dados. Apenas o assunto mantém essa chave. No entanto, todos podem descriptografar os dados porque a chave pública que descriptografa esses dados são disponibilizados publicamente. Conseqüentemente, se o destinatário pode descriptografar esses dados por meio da chave pública, pode estar razoavelmente certo de que apenas o assunto criptografou os dados. Os algoritmos de criptografia usados na criptografia assimétrica incluem o seguinte: Acordo de chaves de Diffie-Hellman, RSA (Rivest-Shamir-Adleman), DSA (Algoritmo de assinatura digital). (GALVÃO, 2007).
2.6 Criptografia Moderna
	A era da criptografia moderna começa realmente com Claude Shannon, possivelmente o pai da criptografia matemática. Em 1949 ele publicou um artigo Communication Theory of Secrecy Systems com Warren Weaver. Este artigo, junto com outros de seus trabalhos que criaram a área de Teoria da Informação estabeleceu uma base teórica sólida para a criptografia e para a criptoanálise. Depois disso, quase todo o trabalho realizado em criptografia se tornou secreto, realizado em organizações governamentais especializadas (como o NSA nos Estados Unidos). Apenas em meados de 1970 as coisas começaram a mudar.
Em 1976 aconteceram dois grandes marcos da criptografia para o público. O primeiro foi a publicação, pelo governo americano, do DES (Data Encryption Standard), um algoritmo aberto de criptografia simétrica, selecionado pela NIST em um concurso onde foi escolhido uma variante do algoritmo Lucifer, proposto pela IBM. O DES foi o primeiro algoritmo de criptografia disponibilizado abertamente ao mercado.
O segundo foi a publicação do artigo New Directions in Cryptography por Whitfield Diffie e Martin Hellman, que iniciou a pesquisa em sistemas de criptografia de chave pública. Este algoritmo ficou conhecido como "algoritmo Diffie-Hellman para troca de chaves" e levou ao imediato surgimento de pesquisas neste campo, que culminou com a criação do algoritmo RSA, por Ronald Rivest, Adi Shamir e Leonard Adleman. 
(PINTO, 2013).
2.7 Criptografia Quântica
	A Criptografia é um conjunto de técnicas que têm como fim o compartilhamento de mensagens de maneira confidencial, ou seja, sem pessoas indesejadas tenham acesso a mensagem. Atualmente, a criptografia se baseia principalmente na dificuldade da fatoração número primos com muitos dígitos. É algo muito custoso computacionalmente, o que torna o tempo de descoberta da chave (“quebra”) inviável, pois o tempo é proporcional ao número de dígitos ao quadrado. O problema desde método é que a sua segurança está intimamente ligada com a capacidade computacional, e não à impossibilidade físico-matemática de se obter a informação. Com o advento de computadores quânticos, para se fatorar um número de N dígitos, um computador de 2N qubits( bit quântico ) seria o suficiente para realizar a tarefa num tempo plausível. (JUNIOR, 2018)
2.8 Assinatura Digital
Cada vez mais, os meios digitais têm sido usados pelas empresas para enviar documentos, arquivos e transações financeiras. Mas como fazer isso de forma segura, certificada e aceita juridicamente?
Foi para que esse tipo de atividade pudesse ser realizado com segurança e confiabilidade que foram criadas ferramentas, como a assinatura digital, o certificado digital e a criptografia, por exemplo. Vamos explicar cada uma delas, separadamente, para que você saiba a importância delas para preservar a segurança de dados da sua empresa.
Torna possível assinar documentos utilizando um Certificado Digital, este recurso permite que a validade de um conteúdo seja analisada para garantir autenticidade e integridade ao documento. Ao assinar um arquivo digitalmente, quem recebe o documento pode ter certeza de ele foi enviado de uma fonte confiável.
Em resumo, ela comprova que a informação foi gerada por quem realmente diz ter feito isso e que não houve alterações ao documento depois do envio. (PORTAL DE ASSINATURAS, 2018).
2.9 Algoritmos de Criptografia
	Um algoritmo é uma sequência finita de passos bem definidas para se executar uma tarefa e atingir um determinado objetivo. Podem ser executadas mecânica ou eletronicamente ou mesmo por um ser humano, e não precisam necessariamente de um programa de computador. Porém, como o uso dos computadores, algoritmos mais complexos podem ser executados num tempo bem menor.Diferentes algoritmos podem realizar a mesma tarefa usando um conjunto diferente de instruções em mais ou menos tempo, espaço ou esforço do que outros. Essa diferença é devido à complexidade computacional envolvida, a qual depende de estruturas de dados adequadas ao algoritmo, entre outros fatores computacionais. (CRUZ, 2017). 
Existem vários algoritmos de criptografia desde os mais simples e antigos, até os atuais e mais complexos como: Cifra de César, Cifra de Vigenère, Máquina de Enigma, ROT13, RSA, DES, SSL, RC4, RC5, Curvas Elípticas, e muitos outros.
2.9.1 Cifra de César
Cifra de César, também conhecida como cifra de troca, código de César ou troca de César, é uma das mais simples e conhecidas técnicas de criptografia. É um tipo de cifra de substituição na qual cada letra do texto é substituída por outra, que se apresenta no alfabeto abaixo dela um número fixo de vezes. Por exemplo, com uma troca de três posições, A seria substituído por D, B se tornaria E, e assim por diante	
A cifra de César foi nomeada em homenagem a Júlio César que, segundo Suetónio, a usava com uma troca de três posições para proteger mensagens de significado militar. Ainda que o uso deste esquema por César tenha sido o primeiro a ser registrado, é sabido que outras cifras de substituições foram utilizadas anteriormente
É desconhecido o quão efetiva era a cifra de César nesta época, mas é provável que fosse razoavelmente segura, ainda mais porque a maioria dos inimigos de César eram analfabetos e outros presumiam que as mensagens estavam escritas em uma língua estrangeira desconhecida. Presumindo que um inimigo pudesse ler a mensagem, não existem registros daquela época de nenhuma técnica para a solução de cifras de substituição simples. Os registros sobreviventes mais recentes datam dos trabalhos de Alcindi no século IX, no mundo árabe, com a descoberta da análise de frequência. 
Uma cifra de César com uma troca de uma posição é utilizada nas costas dos mezuzá para criptografar os nomes de Deus. Isto pode ser um legado de um tempo antigo quando não era permitido ao povo judeu ter mezuzás. As letras do criptograma formam um nome divino que mantém as forças do mal sob controle. 
No século XIX, a seção de anúncios pessoais nos jornais era por vezes utilizada para trocar mensagens criptografadas usando esquemas simples de criptografia. Kahn (1967) descreve alguns exemplos de amantes utilizando comunicações secretas criptografadas usando a cifra de César no The Times. Até mesmo em 1915, a cifra de César continuava em uso: o exército russo empregou-a em substituição às cifras mais complicadas que provaram serem muito difíceis de suas tropas entenderem; no entanto, criptoanalistas alemães e austríacos tiveram pouca dificuldade em descriptografar suas mensagens. 
 
Figura 1 – Método da Cifra de César
 		 Fonte: Wikipedia, 2019
Atualmente, cifras de César podem ser encontradas em brinquedos infantis, como os anéis decodificadores. Uma troca de César de treze posições é também executada no algoritmo ROT13, um método simples de ofuscar o texto amplamente encontrado em UNIX e usado para obscurecer o texto (como a parte final de uma piada ou spoilers), mas não como método de criptografia). 
A cifra de Vigenère usa uma cifra de César com uma troca diferente em cada posição do texto; o valor da troca é definido usando uma palavra-chave repetida. Se a palavra-chave for tão longa quanto a mensagem sem se repetir e escolhida aleatoriamente, então é uma cifra one-time pad, indecifrável se seus usuários mantiverem a palavra-chave em segredo. Palavras-chave mais curtas que a mensagem (a exemplo de "Complete Victory" usada pelos Confederados durante a Guerra de Secessão), introduzem um padrão cíclico que pode ser detectado com uma versão estatisticamente avançada de análise de frequência. (WIKIPEDIA, 2017). 
 	
2.9.2 Cifra de Vigenère
	
A Cifra de Vigenère é uma técnica de criptografia por substituição polialfabética que utiliza uma série de cifras de César diferentes, baseadas nas letras de uma palavra-chave.
Este método de criptografia foi descrito originalmente pelo criptologista italiano Giovan Battista Bellaso em um livro de 1553 de nome “La cifra del. Sig. Giovan Battista Bellaso”. Curiosamente, o método foi atribuído posteriormente e de forma errônea a Blaise de Vigenère no século XIX, e por isso é conhecida até os dias de hoje por “Cifra de Vigenère”.
Trata-se de uma cifra muito simples de entender, implementar e até mesmo quebrar, mas mesmo assim três séculos se passaram até que alguém conseguisse quebrá-la (decifrar mensagens). Chegou a receber a alcunha de “le chiffre indéchiffrable” (“A cifra indecifrável”, em francês). Um método geral de decifrá-la foi publicado pelo criptógrafo e arqueólogo alemão Friedrich Kasiski em 1863 apenas.
Figura 2 – Método da Cifra de Vigenère
 
 Fonte: Wikipedia, 2019
Esta cifra consiste em várias cifras de César utilizadas em sequência, com valores de deslocamento diferentes e obtidos a partir de uma palavra-chave (uma espécie de “senha”).
A cifragem é realizada com o uso de uma tabela de alfabetos, denominada tabula recta, ou “quadrado de Vigenère”, que consiste no alfabeto escrito 26 vezes em linhas diferentes, cada um deslocado ciclicamente para a esquerda comparado com o alfabeto anterior, de forma a corresponder às 26 cifras de César possíveis. Durante o processo de criptografia, a cifra usa um alfabeto diferente de uma das linhas, e o alfabeto a ser utilizado em cada ponto depende da palavra-chave, que é repetida caso a mensagem a ser cifrada seja maior do que ela. (REIS, 2016)
2.9.3 Máquina de Enigma
	Até o início do século XX as cifras desenvolvidas podiam ser solucionadas sem a necessidade de uma máquina, bastava tempo e dedicação.
Mas, com o surgimento da mecanização, algumas máquinas foram desenvolvidas com o intuito de acelerar tanto o processo de cifragem/decifragem como em dificultar a criptoanálise das mensagens cifradas.
Dentre estes equipamentos o mais conhecido é a máquina Enigma, utilizada pelos alemães durante a Segunda Guerra Mundial.
 Figura 3 – Maquina de Enigma 
 
 Fonte: Wikipedia, 2019
A Enigma lembra um pouco uma máquina de escrever, onde ao invés de colocar o resultado no papel, o mesmo era mostrado em um painel luminoso com os caracteres do alfabeto. A chave usada para cifrar/decifrar uma mensagem era configurada por meio de rotores eletromecânicos (3 ou mais) que podiam ser alterados conforme a necessidade para formar a chave.
Foi considerada como impossível de se decifrar uma mensagem cifrada com a Enigma.
Sua quebra só foi possível devido a esforços de poloneses e ingleses, sendo Alan Turing o mais lembrado em ter trabalhado na quebra da cifragem da Enigma. (CRYPTO ID ,2015)
2.9.4 Atbash
A cifra Atbash é uma cifra de substituição com uma chave específica em que as letras do alfabeto são invertidas. Ou seja, todos os 'A' são substituídos por 'Z', todos os 'B' são substituídos por 'Y' e assim por diante. Foi originalmente usado para o alfabeto hebraico, mas pode ser usado para qualquer alfabeto.
A cifra Atbash oferece quase nenhuma segurança e pode ser quebrada com muita facilidade. Mesmo que um adversário não saiba que um texto cifrado foi codificado com a cifra Atbash, ele ainda pode quebrá-la assumindo que é uma cifra de substituição e determinando a chave usando escaladas. A cifra Atbash também é uma cifra Afim com a = 25 eb = 25, portanto, quebrá-la como cifra afim também funciona. 
A cifra Atbash é essencialmente uma cifra de substituição por uma chave fixa, se você souber que é Atbash, nenhuma informação adicional será necessária para descriptografar a mensagem. A chave de substituição é:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
ZYXWVUTSRQPONMLKJIHGFEDCBA
Para codificar uma mensagem, localize a letra que deseja codificar na linha superior e substitua-a pela letra na linha inferior. No exemplo abaixo,criptografamos a mensagem 'ATAQUE AO AMANHECER'. A primeira letra que queremos codificar é 'A', que está acima de 'Z', então a primeira letra do texto cifrado é 'Z'. A próxima letra é 'T', que está acima de 'G', de modo que vem a seguir. A mensagem inteira é criptografada:
ATAQUE AO AMANHECER
ZGGZXP
Para decifrar uma mensagem, é exatamente o mesmo procedimento. Encontre 'Z' na linha superior, que é 'A' na linha inferior. Continue até que toda a mensagem seja decifrada. (PRATICAL CRYPTOGRAPHY, 2019)
2.9.5 RSA
	Rivest-Shamir-Adleman (RSA) foi um dos pioneiros em relação à criptografia de chave pública, seu nome é composto pelos sobrenomes de seus criadores, que também são fundadores da companhia RSA Data Security.
Esse é considerado um dos algoritmos mais seguros do mercado, por essa razão também foi o primeiro a possibilitar a criptografia na assinatura digital.
O RSA funciona da seguinte forma: ele cria duas chaves diferentes, uma pública e outra privada (que deve ser mantida em sigilo). Todas as mensagens podem ser cifradas pela pública, mas somente decifradas pela privada.
Atualmente, essa tecnologia é utilizada em operações rotineiras, como envio de e-mails, compras online, assinatura digital, entre outras atividades. (VALID CERTIFICADORA, 2019).
2.9.6 DES
Data Encryption Standard (DES) é uma das primeiras criptografias utilizadas e é considerada uma proteção básica de poucos bits (cerca de 56). O seu algoritmo é o mais difundido mundialmente e realiza 16 ciclos de codificação para proteger uma informação.
A complexidade e o tamanho das chaves de criptografia são medidos em bits. Quando uma criptografia é feita com 128 bits, significa que 2128 é o número de chaves possíveis para decifrá-la. Atualmente, essa quantidade de bits é considerada segura, mas quanto maior o número, mais elevada será a segurança.
Quando dizemos que um bloco foi criptografado em bits, significa que um conjunto de informações passou pelo mesmo processo da chave, tornando-se ilegível para terceiros.
O DES pode ser decifrado com a técnica de força bruta (o programa testa as possibilidades de chave automaticamente durante horas). Por essa razão, os desenvolvedores precisam buscar alternativas de proteção mais complexas além do DES. (VALID CERTIFICADORA, 2019).
2.9.7 3DES
O Triple DES foi originalmente desenvolvido para substituir o DES, já que os hackers aprenderam a superá-lo com relativa facilidade. Houve um tempo em que o 3DES era o padrão recomendado para segurança.
Essa criptografia recebe esse nome pelo fato de trabalhar com três chaves de 56 bits cada, o que gera uma chave com o total de 168 bit. Especialistas no tema argumentam que uma chave de 112 bits é suficiente para proteger os dados. (VALID CERTIFICADORA, 2019).
2.9.8 DESX
Essa é outra variante do DES e trata-se de uma solução bastante simples do algoritmo, mas que aumenta exponencialmente a resistência contra-ataques de força bruta sem elevar a sua complexidade computacional.
Basicamente, adicionam-se 64 bits antes da encriptação, o que aumenta a proteção de 120 bits contra força bruta. Atualmente, essa tecnologia não é mais imune contra-ataques mais sofisticados, como criptoanálises (o programa evolui a cada tentativa de decifração). (VALID CERTIFICADORA, 2019).
2.9.9 AES
Advanced Encryption Standard (AES) — ou Padrão de Criptografia Avançada, em português — é o algoritmo padrão do governo dos Estados Unidos e de várias outras organizações. Ele é confiável e excepcionalmente eficiente na sua forma em 128 bits, mas também é possível usar chaves e 192 e 256 bits para informações que precisam de proteção maior.
O AES é amplamente considerado imune a todos os ataques, exceto aos ataques de força bruta, que tentam decifrar o código em todas as combinações possíveis em 128, 192 e 256 bits, o que é imensamente difícil na atualidade. (VALID CERTIFICADORA, 2019).
2.9.10 Camellia
Desenvolvido em 2000, Camellia é uma criptografia que decifra blocos de informações. Trata-se de uma tecnologia com níveis de segurança bastante semelhantes ao AES, já que pode ser processada em 128, 192 e 256 bits.
Camellia pode ser implementada tanto em softwares (programas) quanto hardwares (peças físicas de computador). Também é compatível com tecnologias mais econômicas de 8 bits (smartcards, sistemas de operação em tempo real etc.) até com processadores mais potentes de 32 bits (computadores de mesa). (VALID CERTIFICADORA, 2019).
2.9.11 Blowfish
Esse é outro algoritmo desenvolvido para substituir o DES. É uma cifra simétrica que divide as informações em blocos de 64 bits e criptografa cada um deles individualmente.
O Blowfish é conhecido por sua velocidade de encriptação e efetividade em geral. Trata-se de uma tecnologia bastante segura, pois há estudiosos no assunto que afirmam que o código não pode ser quebrado.
Ele é completamente grátis, e qualquer indivíduo pode conseguir uma cópia de seu código-fonte, alterar e utilizá-lo em diferentes programas. De forma geral, o Blowfish é usado em plataformas de e-commerce para garantir segurança nos pagamentos e proteger senha de acesso dos usuários. (VALID CERTIFICADORA, 2019).
2.9.12 Twofish
O Twofish é uma variação do Blowfish e também consiste na cifração de blocos simétricos. A diferença é que ele é formado por blocos de 128 bits e chaves de até 256 bits.
A tecnologia é considerada uma das mais rápidas de seu tipo e é ideal para prover segurança de softwares e hardwares. Seu código-fonte também é gratuito, podendo ser manipulado e utilizado por qualquer programador.
Existe outra variação da mesma criptografia chamada Threefish, a diferença é que os tamanhos dos blocos são de 256, 512 e 1024 bits, com chaves do mesmo tamanho. (VALID CERTIFICADORA, 2019).
2.9.13 SAFER
SAFER (“mais seguro” em português) é uma sigla para Secure and Fast Encryption Routine. Consiste na criptografia de blocos em 64 bits, por isso é conhecido como SAFER SK-64.
Entretanto, foram encontradas fraquezas nesse código, o que resultou no desenvolvimento de novas versões com diferentes tamanhos de chave, como a SK-40, SK-64 e a SK-128 bits. (VALID CERTIFICADORA, 2019).
3 Desenvolvimento
Os primeiros passos para começar a desenvolver o programa de criptografia foram definir quais os tipos de criptografia que iríamos usar no nosso programa. Dentre várias opções escolhemos a cifra de César, pois foi uma da primeira criptografia e pai de todas outras e também o método de criptografia Atbash, devido à simplicidade da substituição das letras.
Fizemos o melhor para que ambos algoritmos fossem fáceis de entender e de serem utilizados, e que o usuário dos algoritmos não precisasse ter muito conhecimento para poder usá-los.
Ambos algoritmos possuem funções de criptografar e descriptografar, que são acessadas através de um menu que criamos para facilitar a utilização do algoritmo. Para acessar os algoritmos também criamos um menu de opções para o usuário escolher o algoritmo que mais se interessar. Também criamos uma função com duas opções, para que o usuário pudesse escolher, entre continuar usando o programa, voltando ao início e outra opção para finalizar a execução do programa. Criamos também uma função simples de linhas para deixar a aparência final do programa mais bonita. 
Para criptografar a Cifra de César utilizamos os seguintes códigos:
for i in range(len(msg)):
if ord(msg[i]) == 32:  
elif ord(msg[i]) + key > 122:
temp = (ord(msg[i]) + key) - 122  
texto_criptografado += chr(96+temp)
elif (ord(msg[i]) + key > 90) and (ord(msg[i]) <= 96):
temp = (ord(msg[i]) + key) - 90
texto_criptografado += chr(64+temp)
else:
texto_criptografado += chr(ord(msg[i]) + key).
Para descriptografar a Cifra de César utilizamos os seguintes códigos:
for i in range(len(msg_criptografada)):
if ord(msg_criptografada[i]) == 32:
mensagem_descripto += chr(ord(msg_criptografada[i]))
elif ((ord(msg_criptografada[i]) - key_descriptografada) < 97) and ((ord(msg_criptografada[i]) - key_descriptografada) > 90):
temp = (ord(msg_criptografada[i]) - key_descriptografada) + 26
mensagem_descripto+= chr(temp)
elif (ord(msg_criptografada[i]) - key_descriptografada) < 65:
temp = (ord(msg_criptografada[i]) - key_descriptografada) + 26
mensagem_descripto += chr(temp)
else:
mensagem_descripto += chr(ord(msg_criptografada[i]) - key_descriptografada).
Para criptografar usando a cifra de Atbash utilizamos os seguintes códigos:
for i in range(len(msg)):
if msg[i] == chr(32):
texto_criptografado += " "
else:
for j in range(len(alfabeto)):
if msg[i] == alfabeto[j]:
texto_criptografado += revert_alfabeto[j]
break.
Para descriptografar usando a cifra de Atbash utilizamos os seguintes códigos:
for i in range(len(msg)):
if msg[i] == chr(32):
texto_descriptografado += " "
else:
for j in range(len(revert_alfabeto)):
if msg[i] == revert_alfabeto[j]:
texto_descriptografado += alfabeto[j]
break.
	Para demonstrar temos as telas do programa. A primeira tela nos fornece a informação sobre sustentabilidade pela qual foi desenvolvido o código, logo em baixo temos a primeira escolha, onde o usuário vai decidir a cifra que vai utilizar.
 
	A segunda, terceira e quarta tela nos mostra a escolha pela cifra de César, onde a segunda tela nos mostra que o usuário precisa escolher entre criptografar e descriptografar. A terceira tela mostra a escolha pela criptografia, pedindo ao usuário para que insira uma mensagem, logo em seguida, pede que informe a chave que vai de 0 a 25, e assim criptografando com sucesso. Em seguida o programa pergunta para o usuário se deseja continuar ou não. Já na quarta tela percebemos que o usuário escolheu por continuar utilizando o programa, e agora escolhendo a opção de descriptografia, e digitando o texto que foi criptografado para testar a descriptografia, utilizando a mesma chave, temos a mensagem descriptografada com sucesso. 
Na quinta temos o usuário escolhendo a cifra de Atbash, começando pela criptografia, e o programa funcionando corretamente e, escolhendo por continuar usando o programa. 
E na sexta tela temos o usuário optando pela descriptografia e novamente o programa desempenha a função desejada com sucesso. E para finalizar, temos o usuário escolhendo não continuar e o programa se despede do usuário.
4 Resultados e Discussão
As discussões sobre a APS começaram logo após a coordenadora apresentar e disponibilizar para nós o roteiro e o exemplo.
Tivemos que nos reunir na faculdade, e em casos de dúvidas, online pois a maioria das pessoas do grupo são de cidades diferentes, fomos desenvolvendo esse trabalho de acordo com o nosso tempo, e com o nosso aprendizado. Até que conseguimos finalizá-lo. 
Este trabalho foi muito difícil de ser feito, mas com muito esforço dos integrantes e muito estudo, conseguimos desenvolver um bom trabalho. Sendo que ninguém do grupo tinha experiencia no assunto de criptografia e todos tendo um conhecimento básico em python.
No inicio do trabalho, todos concordaram em trabalhar com a cifra de César, e com a cifra de Vigenère. No entanto o resultado da cifra de Vigenère não foi positivo, a gente conseguiu desenvolver o código, mas nos testes percebemos que a descriptografia não estava funcionando corretamente, e como nós não conseguimos resolver este problema, decidimos por desenvolver outro código e escolher a cifra Atbash.
Após desenvolver a cifra de Atbash com sucesso, começamos desenvolver, funções para poder juntar os códigos para que o usuário pudesse escolher a cifra de sua preferência, e tudo ocorreu perfeitamente, assim o código ficou completo.
Ao executar, o código inicia com a opção de escolher um algoritmo entre Cifra de César, ou Cifra de AtBash, digitando 1 ou 2, caso o usuário escolha o número 1 (Cifra de César), vai aparecer uma opção de escolher entre criptografar (1), ou descriptografar (2). Após escolher entre criptografar ou descriptografar, vai ser exibida a condição na qual ele deverá digitar uma mensagem, tanto na opção de Cifra de César, quanto na Cifra AtBash. 
Ao digitar uma mensagem qualquer, a mensagem vai ser criptografada ou descriptografada conforme a sua escolha. No caso da cifra de César, devemos inserir a chave, que vai de 0 até 25.
No fim ele vai dar a mensagem descriptografada, e também vai ser apresentada a opção de continuar, caso escolha “Sim”, o programa vai começar do início, agora se quiser fazer com que feche o programa é só digitar “Não”, e o programa vai exibir a seguinte mensagem, “Até a Próxima”, e o programa será finalizado.
5 Considerações Finais
Apesar das dificuldades, da realização do trabalho à distância, pois cada membro do grupo mora em uma cidade diferente, realizamos todo o processo do trabalho na própria faculdade para que a comunicação do que tinha que ser feito fosse mais adequada.
Sendo assim a realização dos códigos obteve-se muita dificuldade em manter um foco para desenvolvimento dos códigos, e a realização de testes foi onde nos ajudou a achar a base do desenvolvimento geral.
Entendemos que este trabalho de APS serve para ver como estamos indo nos estudos, pois o projeto consiste fazer uma junção de várias matérias como IPE, LPA, além de outras matérias envolvidas, além de nos fazer colocar em prática o que aprendemos nas aulas.
O trabalho de criptografia fez com que o grupo pudesse se relacionar melhor, assim aprendendo muito mais sobre criptografia e descriptografia, também sobre como desenvolver um programa, e aprender a executar e corrigir as falhas que ocorrem ao decorrer do desenvolvimento.
E também aprendemos mais sobre a cifra de César que é um tipo de cifra de substituição na qual cada letra do texto é substituída por outra, que se apresenta no alfabeto abaixo dela um número fixo de vezes. Por exemplo, com uma troca de três posições, além de ser umas das cifras mais conhecidas e simples que existe.
E por fim a cifra de Atbash que é uma cifra de substituição com uma chave específica em que as letras do alfabeto são invertidas. Ou seja, todos os 'A' são substituídos por 'Z', todos os 'B' são substituídos por 'Y' e assim por diante, mas possui, e por se tratar de uma cifra muito simples, é uma cifra muito fácil de ser quebrada.
Referências Bibliográficas
ANDRADE, EDER (2013). A história da Computação. Disponível em http://www.dsc.ufcg.edu.br/~pet/jornal/abril2014/materias/historia_da_computacao.html> Acessado em outubro de 2019.
CRUZ, ADRIANO JOAQUIM DE OLIVEIRA. Algoritmos. Núcleo de Computação Eletrônica da Universidade Federal do Rio de Janeiro. Disponível em < http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm> Acessado em agosto de 2017.
CRYPTO ID. Uma breve história sobre Criptografia (2015). Disponível em <https://cryptoid.com.br/banco-de-noticias/a-historia-da-criptografia/> Acessado em outubro de 2019.
FIARRESGA, Victor Manuel Calhabrês; Jorge Nuno Oliveira e SILVA (2010). Teses de Mestrado. Repositório aberto da Universidade de Lisboa. Disponível em: < http://repositorio.ul.pt/handle/10451/3647> Acessado em agosto de 2017.
GALVÃO, JUNIOR. Chave simétrica e assimétrica (2007). Disponível em <https://pedrogalvaojunior.wordpress.com/2007/11/16/diferencas-entre-chaves-simetrica-e-assimetrica-para-criptografia/> Acessado em outubro de 2019.
JUNIOR, ENFITEC (2018). Criptografia quântica. Disponível em <https://www.ufrgs.br/enfitecjunior/2018/05/31/criptografia-quantica/> Acessado em outubro de 2019.
PINTO, PEDRO. História da Criptografia (2013). Disponível em <https://pplware.sapo.pt/informacao/conhea-a-historia-da-criptografia/> Acessado em outubro de 2019.
PORTAL DE ASSINATURAS (2018). Como funciona assinatura digital. Disponível em: <https://blog.portaldeassinaturas.com.br/como-funciona-a-criptografia-na-assinatura-digital/> Acessado em outubro de 2019.
PRATICAL CRYPTOGRAPHY. Criptografia Atbash. Disponível em: <http://practicalcryptography.com/ciphers/atbash-cipher-cipher/> Acessado em outubro de 2019.
REIS, FÁBIO. Criptografia - Cifra de Vigenère. Disponível em:<http://www.bosontreinamentos.com.br/seguranca/criptografia-cifra-de-vigenere/ > Acessado em outubro de 2019.
VALID CERTIFICADORA. Tipos de Criptografia(2019). Disponível em <https://blog.validcertificadora.com.br/tipos-de-criptografia-conheca-os-10-mais-usados-e-como-funciona-cada-um/> Acessado em outubro de 2019.
WIKIPEDIA. Chave de Criptografia. Disponível em <https://pt.wikipedia.org/wiki/Chave_(criptografia)> Acessado em outubro de 2019.
WIKIPEDIA. Criptografia. Disponível em <https://pt.wikipedia.org/wiki/Criptografia> Acessado em outubro de 2019.
WIKIPÉDIA. Cifra de César. Disponível em: <https://pt.wikipedia.org/wiki/Cifra_de_C%C3%A9sar >Acessado em agosto de 2019.
Figuras 
Figura 1. Cifra de César. Disponível em:
<https://pt.wikipedia.org/wiki/Cifra_de_C%C3%A9sar> Acessado em outubro de 2019.
Figura 2. Máquina de Vigenère. Disponível em:
<https://pt.wikipedia.org/wiki/Ficheiro:Vigen%C3%A8re_square_shading.svg> Acessado em outubro de 2019. 
Figura 3. Maquina de Enigma. Disponível em:
<https://pt.wikipedia.org/wiki/Enigma_(m%C3%A1quina)> Acessado em outubro de 2019.
Código Fonte
#Cifra de César
def criptografia():
    linha()
    print("          Criptografar           ")
    linha()
    msg = input("Insira uma mensagem: ")
    key = int(input("Insira a chave (0-25): "))  #pula as letras
    texto_criptografado = ""
    for i in range(len(msg)):
        if ord(msg[i]) == 32:  # ord() fornece o espaço que é o caracter 32
            texto_criptografado += chr(ord(msg[i]))  # chr () converte ASCII novamente em caracter
        elif ord(msg[i]) + key > 122:
            # depois de 'z', volte para 'a', 'a' = 97, 'z' = 122
            temp = (ord(msg[i]) + key) - 122  # subtrai 122 para obter um int menor e adicioná-lo em 96
            texto_criptografado += chr(96+temp)
        elif (ord(msg[i]) + key > 90) and (ord(msg[i]) <= 96):
            # voltando para 'A' depois de 'Z'
            temp = (ord(msg[i]) + key) - 90
            texto_criptografado += chr(64+temp)
        else:
            # no caso de letras estar entre a-z e A-Z
            texto_criptografado += chr(ord(msg[i]) + key)
    print("Mensagem Criptografada: " + texto_criptografado)
    continuação()
def descriptografia():
    linha()
    print("        Descriptografar         ")
    linha()
    
    msg_criptografada = input("Mensagem criptografada: ")
    key_descriptografada = int(input("Insira a chave (0-25): "))
    mensagem_descripto = ""
    for i in range(len(msg_criptografada)):
        if ord(msg_criptografada[i]) == 32:
            mensagem_descripto += chr(ord(msg_criptografada[i]))
        elif ((ord(msg_criptografada[i]) - key_descriptografada) < 97) and ((ord(msg_criptografada[i]) - key_descriptografada) > 90):
            # subtrai chave da tabela ASCII e adiciona 26 no número atual
            temp = (ord(msg_criptografada[i]) - key_descriptografada) + 26
            mensagem_descripto += chr(temp)
        elif (ord(msg_criptografada[i]) - key_descriptografada) < 65:
            temp = (ord(msg_criptografada[i]) - key_descriptografada) + 26
            mensagem_descripto += chr(temp)
        else:
            mensagem_descripto += chr(ord(msg_criptografada[i]) - key_descriptografada)
    print("Mensagem Descriptografada: " + mensagem_descripto)
    continuação()
def cezar_menu():
    linha()
    print("    Escolha uma Opção (1,2)      ")
    linha()
    escolha = int(input("1. Criptografar\n2. Descriptografar\nSua escolha: "))
   
    if escolha == 1:
        criptografia()
    elif escolha == 2:
        descriptografia()
    else:
        linha()
        print("        Escolha Errada!!!        ")
        linha()
#Cifra AtBash
def at_criptografia():
    alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    revert_alfabeto = alfabeto[::-1]
    linha()
    print("          Criptografar           ")
    linha()
    msg = (input("Digite uma Mensagem: ")).upper()
    texto_criptografado = ""
    for i in range(len(msg)):
        if msg[i] == chr(32):
            texto_criptografado += " "
        else:
            for j in range(len(alfabeto)):
                if msg[i] == alfabeto[j]:
                    texto_criptografado += revert_alfabeto[j]
                    break
               
    print("Texto Criptografado: {}".format(texto_criptografado))
    continuação()
def at_descriptografia():
    alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    revert_alfabeto = alfabeto[::-1]
    linha()
    print("        Descriptografar         ")
    linha()
    
    
    msg = (input("Digite uma Mensagem: ")).upper()
    texto_descriptografado = ""
    for i in range(len(msg)):
        if msg[i] == chr(32):
            texto_descriptografado += " "
        else:
            for j in range(len(revert_alfabeto)):
                if msg[i] == revert_alfabeto[j]:
                    texto_descriptografado += alfabeto[j]
                    break
 
    print("Texto Descriptografado: {}".format(texto_descriptografado))
    continuação()
def at_menu():
    
    linha()
    print("    Escolha uma Opção (1,2)      ")
    linha()
    
    escolha = int(input("1.Criptografar\n2.Descriptografar\nEscolha(1,2): "))
    if escolha == 1:
        at_criptografia()
    elif escolha == 2:
        at_descriptografia()
    
else:
        linha()
        print("        Escolha Errada!!!        ")
        linha()
def continuação():
    linha()
    print("  Deseja continuar? (Sim) (Não)  ")
    linha()
    escolha=str(input("Sua escolha: "))
    if escolha == "Sim":
        return main()
    elif escolha == "Não":
        linha()
        print("          Até á Próxima          ")
        linha()
    else:
        linha()
        print("        Opção Invalida        ")
        linha()
def linha():
    print("-=-"*11)
def main():
    linha()
    print("     Escolha um Algoritimo       ")
    linha() 
    escolha = int(input("1. Cifra de César\n2. Cifra AtBash\nSua escolha: "))
    
    if escolha == 1:
        cezar_menu()
    elif escolha == 2:
        at_menu()
    else:
        linha()
        print("        Escolha Errada!!!        ")
        linha()
    
if __name__ == "__main__":
    main()
	
FICHAS APS

Continue navegando