Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE PAULISTA - UNIP CAMPUS TATUAPÉ CURSO DE CIÊNCIA DA COMPUTAÇÃO CRIPTOGRAFIA BRENO LUCAS ENZO AUGUSTO LUCAS AMARAL JHEFFERSON ESTEVANATO VINICIUS CASTELO SÃO PAULO - SP 2018 BRENO LUCAS N253AF-4 ENZO AUGUSTO D751794 LUCAS AMARAL T6623H-4 JHEFFERSON ESTEVANATO D68407-8 VINICIUS CASTELO N251GA-4 CRIPTOGRAFIA Trabalho semestral apresentado como parte dos requisitos para aprovação de semestre do curso Bacharel em Ciência Da Computação. Área de concentração: Seg. da Info. Orientador: Msc. Caique Zaneti Kirilo SÃO PAULO - SP 2018 Índice INTRODUÇÃO ............................................................................................................ 4 Objetivo do trabalho ..................................................................................................... 5 Técnicas criptográficas mais utilizadas e conhecidas ..................................................... 6 • RSA .................................................................................................................................... 6 • MD2 ................................................................................................................................... 8 • MD4 ................................................................................................................................... 9 MD5 ........................................................................................................................... 10 • Utilidade e Benficio .......................................................................................................... 11 • Utilizando o MD5 em senhas ............................................................................................ 12 • Utilizando o MD5 na checagem de integridade de arquivos .............................................. 12 • Vulnerabilidade ................................................................................................................ 13 • Método construção de uma classe para criptografia ......................................................... 13 Projeto ........................................................................................................................ 15 • MD5 ................................................................................................................................. 15 • C ...................................................................................................................................... 15 • Hardware e sistema operacional ...................................................................................... 16 • Git .................................................................................................................................... 16 • GitHub ............................................................................................................................. 17 Bibliografia ................................................................................................................. 18 Pseudocódigo .............................................................................................................. 19 Fluxograma ................................................................................................................. 26 4 INTRODUÇÃO Na atualidade, pode-se contemplar a amplo exapansionamento da tecnologia da informação, e dado esse expansionamento, nasce também a necessidade de se obter uma garantia da informação. A criptografia nos dias de hoje nos proporciona um nível de segurança elevado, e juntamente com uso do método de encriptação do MD5, torna-se um pouco mais confiável alocarmos nossas informações, senha ou o que quer que seja, pois, essa metodologia de encriptação consiste em “mascarar” qualquer conteúdo de string em uma sequencia de algarismos de 32 bits. O detrimento de informações pode constituir enormes danos para um conglomerado de organizações, companhia ou utente, e pode ir desde uma cópia não autorizada de dados pessoais até um desfalque de segredos militares, governamentais e empresariais. E é por esse motivo que o método da criptografia se torna eficiente, zelando e garantindo a integridade de nossas informações. Todavia, a criptografia possui graves obstáculos no que diz respeito à vulnerabilidade de códigos e cifras. Ambas estão sujeitas ao rompimento por análise – no pior das presunções uma ofensiva por força bruta. É delicado especificar uma criptografia segura ou até mesmo apontar uma que seja mais eficaz que a outra (quiçá mais eficaz que todas). Sendo assim, arriscaria dizer que falhas em relação à encriptação de dados são demasiadamente “comuns”. Não deveria acontecer, mas essas falhas existem e não podemos omiti-las, até porque se fizermos vistas grossas mediante a isso, o nível de segurança iriam manter-se estagnados. Torna-se relevante explorar o tema, pois, a criptografia faz parte da história da humanidade dado pelo fato de sempre ter existido fórmulas sigilosas e informações secretas que não deveriam de maneira alguma ser de conhecimento público ou cair nas mãos de algum “inimigo”. Trocando em miúdos, a criptografia é basicamente a integridade de informações. Caracteriza-se como uma escrita secreta a fim de garantir a segurança de dados em procedimentos de transmissões seja ela qual for, asseverando que não haja interferências exteriores. Um exemplo documentado, um dos primeiros, de uma cifragem escrita está ligada ao ano de 1900 a.C., quando um escriba, Khnumhotep II, teve a ideia de alterar determinadas palavras e trechos de um texto. Se por ventura o documento fosse furtado por algum ladrão, o mesmo não saberia encontrar a rota que o guiaria ate o tesouro e morreria de fome, perdido por entre as catacumbas da pirâmide. 5 Objetivo do trabalho O intuito do atual trabalho acadêmico apresentado é tornar público a metodologia de criptografia conhecido como MD5. MD5 é a certificação de integridade de senhas e logins. Adolescido pela RSA Data Security, Inc, para substituir ao MD4 que tinha algumas dificuldades relacionada à segurança. Comumente utilizado em domínio público e também de uso geral, a criptografia MD5, a partir de uma determinada mensagem de dimensão qualquer, desenvolve um valor hash (algoritmo que mapeia dados de extensão variável para dados de comprimento fixo) de 128 bits e, com esse algoritmo, é computacionalmente impossível desvendar dois conteúdos de mensagens que gerem e retornem o mesmo valor. O algoritmo MD5 é empregado como maquinismo de certificação e integridade em inúmeros protocolos de padrão Internet (RFC1352, RFC1446, etc.), tal como pelo CERT e CIAC. Devido ao fato do MD5 não poder ser decodificado, o algoritmo hash necessita que haja uma nova operação que possibilite dele ser “re-gerado” e cotejado com a continuação disponível anteriormente. Se os dois possuírem igualdade, há permissão e o acesso é liberado. 6 Técnicas criptográficas mais utilizadas e conhecidas • RSA Contando um pouco da trajetória. . Há muito tempo atrás, na era clássica ou até mesmo antes dela, as pessoas utilizam métodos de encriptação para comunicarmensagens confidenciais. O conceito é simples: digamos que possua uma chave ou artifício que utilizo para “confundir” o conteúdo de uma mensagem e somente quem é conhecedor deste artificio ou conhecedor do conteúdo da mensagem, irá conseguir tornar o conteúdo da mesma legível novamente (Oliveira, 2012). A grande dificuldade desta operação é que assim como o emitente quanto o receptor, ambos devem ser conhecedor da chave encriptada. Uma sucinta exemplificação: se por ventura eu – que resido São Paulo – ambicionasse enviar uma mensagem encriptada para um parente, situado no estado do Rio De Janeiro nesse exato momento, eu teria de conseguir algum jeito seguro de remeter a esse meu parente a criptografia que utilizei para encriptar o o conteúdo da mensagem. De que forma eu poderia remeter essa chave de modo seguro? Não teria como. (Oliveira, 2012). Esse método chama-se criptografia de chave simétrica. A fim resolver esse problema, desenvolveu-se um pensamento de criar uma chave assimétrica, ou seja, com duas ou demais chaves. Acredito que o exemplo mais cabível a isto seja o seguinte: 7 Fonte: Imagem retirada do site www.lambda3.com.br Nos anos 70, dois cientistas computacionais, Ronald Rivest e Adi Shamir, que trabalhara no MIT, empenharam-se em desenvolver uma metodologia de criptografia utilizando chaves assimétrica eficaz. Ambos foram amparados pelo matemático Leonard Adleman que legitimava as ideias de ambos os cientistas, pelos aspectos matemático. Em 1977 os três registraram e patentearam o método RSA. (Oliveira, 2012). Abrangendo o funcionamento do RSA, podemos dizer que ela possui duas chaves: uma é a chave pública e a outra privada. A pública, como o próprio nome define, eu posso espalhar livremente; qualquer um pode utilizar essa minha chave para encriptar um conteúdo contendo uma mensagem para mim. Porém, só há possibilidade descriptar o conteudo da mensagem utilizando a chave privada. Chave essa que eu detenho e mantenho sob sigilo. (Oliveira, 2012). O RSA tem embasamento mediante uma das áreas clássicas da matemática, conhecida como Teoria dos números. Baseia-se na dificuldade de calcular o fatorial do número de seus elementos primos. Primeiramente lembremos que um número primo, consiste em um número que só é divisível ele próprio e por 1 (sendo uma divisão exata, sem número fracionado); Em seguida, devemos recobrar como encontrar os fatoriais primos de um número. (Oliveira, 2012). Com base no Teorema Fundamental da Aritmética, qualquer número inteiro positivo e que seja maior que 1, é possível calcular o fatorial de uma forma única em um produto de números primos. Exemplificando: 26 = 2 * 13 44 = 2 * 2 * 11 Calcular o fatorial de pequenos números se torna algo não tão complexo, mas efetuar o fatorial de números amplos é demasiadamente complexo e demorado, já que 8 isso é um problema que não se tem como ser sanado em um andamento polinomial determinístico, ou falando de forma bem fácil, não existe uma expressão para tal. (Oliveira, 2012). O RSA utiliza-se das chaves publicas e privadas e, a partir delas são efetuadas multiplicações com base em dois números primos. A implicação desta multiplicação irá ser público, porém, se a quantidade de números for extensa o suficiente, calcular o fatorial desse número para encontrar os primos utilizados para efetuar a operação de multiplicação para formá-lo pode levar anos. E é exatamente dessa particularidade que advém a integridade do RSA. Embora não seja impossível romper a criptografia RSA, entretanto, para chegar a este feito demandariam alguns bons anos ou décadas, tornando a ideia inviável. Por fim, o RSA é facilmente implementado e usado para a integridade das informações em atividades comercias e até mesmo na permutação de mensagens por redes não segura. Entretanto, se tratando de um algoritmo complicado, quando se descobre em um tamanho consideravelmente amplo precisa do recurso computacional significativo para sanar o problema em um espaço curto tempo. (Oliveira, 2012). • MD2 MD2 Ron Rivest criou um algoritmo de resumo e chamou-o de MD. Em seguida, pensou que poderia melhorá-lo e desenvolveu a próxima geração, MD2. Pelo fato de o MD2 produzir um resumo de 128 bits (16-bytes),ele te2 síveis valores de resumo. MD2 foi amplamente utilizado, mas com o passar dos anos, os analistas encontraram defeitos. Por fim, descobriram algumas coi- soes. Ninguém tinha sido capaz de encontrar por demanda as colisões em qual quer mensagem arbitrária, mas certas classes de mensagens produziam coli sões. Portanto, o MD2 não tem sido muito utilizado, exceto em certificadosan- tigos criados antes do MD2 oque fez com ele perdesse sua fonça (o Capírulo b descreve os certificados). A maioria desses certificados antigos provavelmente expirou ou irá expirar em breve. Nenhum bom criptógrafo recomendaria a uti- lização do MD2 em novos aplicativos. (Cormen, 2002) 9 Desenvolvido por Ronald Rivest, MD5 se tornou uma das massage digest mais utilizadas e pode sim ser usada livremente. Foi baseado em criações anteriores como MD4 que por sua fez também foi baseada na MD2. (Cormen, 2002) As citadas MD5, MD4 e MD2, tem funções semelhantes ao produzirem mensagens de 128bits, a partir de um único bloco de texto de tamanho indefinido. Por etapas ela primeiramente divide e separa o texto de certo bloco em questão, em diversos blocos fixos e em seguida realiza diversas operações e funções matemáticas nos blocos de entrada. (Cormen, 2002) O MD2 foi devidamente publicado na RFC1319, por Ronald Rivest. Ronald desenvolveu o MD4 para que fosse uma ferramenta rápido em criações de massage digest, após seu desenvolvimento o MD4 foi publicado nas RFC 1186 e 1320. A ferramenta foi desenvolvida para ser rápida, compacta, e ser implementada em certas maquinas arquitetadas com “litle-endian” Diversos ataques ao MD4 foram realizados e publicados na “literatura” sobre a ferramenta, então logo Rivest desenvolveu o seu sucessor MD5 utilizado até hoje foi publicado na RFC 1321, teve uma gigantesta re-estruturação referente ao MD4 e possui uma passagem interna a mais além do algoritmo, além de conter diversas outras mudanças significativas e como consequência a suas alterações o MD5 é mais lento que o MD4. Porém mesmo assim é mais utilizado. (Cormen, 2002) • MD4 A criptografia MD4 é uma fórmula que inventa um determinado valor em algoritmo de 128 bits é semelhante ao funcionamento do algoritmo da MD2 e foram criados pela RSA Data Security, no ano de 1990.[1] (Adão, 2015) O início da criptografia MD4 necessita ser de tamanho multíplice de 512 bits, e o final tem de ser 128 bits. Caso a entrada não seja de 512 bits, tem que ser complementada por um bit 1 seguido de zero, que assim então façam totalizar 64 bits a menos, que o sucessor múltiplo de 512. Nos derradeiros 64 bits, o tamanho de entrada real tem que ser contido, como segue o exemplo. 10 Inicio X : 1010101111100101...011101101 1 bit continuo de 0 : 1000...0000 Tamanho real de X 1101101000010111...011110010/1000...0000/64 bits (Adão, 2015) Por definição, um hash é um algoritmo que mapeia os dados de tamanho variável, para dados de tamanho fixo. E os valor ai retornados são denominados valores hash, código hash, soma hash, ou simplesmente “hashes”. (Adão, 2015) Um algoritmo criado pelo MD4, tendo como inicio uma mensagem em caractere MD4= 7dca786af3ea7f9b9c5b71ea944a703c Sua trajetória foi curta, criado em 1990, foi substituído pelo MD5 um pouco depois de um ano, pois possuía falhasde segurança; Erros foram notificados após 2 milhões de mensagens criptografadas. A base deste algoritmo, deu início a criação de diversos outros algoritmos como: MD5, RIPEMD e o SHA-1. A MD4 é utilizada também para calcular o hash de chaves de segurança, nos sistemas da Microsoft NT. (Adão, 2015) MD5 O algoritmo MD5 ou Message-Digest Algorithm adota como início uma mensagem de dimensão arbitrativa e lança como saída uma "impressão digital" ou "resumo da mensagem" de 128 bits da entrada. Presume-se que é computacionalmente irrealizável gerar dois conteúdos de mensagens com o mesmo resumo de mensagens, ou produzir alguma mensagem que tenha uma “informação resumo” de mensagem alvo pré-especificado. Destinado a aplicativos de assinatura digital, o algoritmo MD5 em um arquivo amplo deve ser "compactado" de um jeito seguro previamente de ser encriptado com uma chave privada (secreta) em um sistema criptográfico de chave pública, como RSA. O MD5 foi concebido em 1991 com o intuito de substituir o MD4, que por sua vez apresentara certas dificuldades relacionado à segurança. Tratando-se de um algoritmo 11 unidirecional, qualquer hash MD5 não pode ser modificada de novo no texto em que o ocasionou (Mazzeto, 2018). No ano de 2008, Ronald Rivest e alguns outros anunciaram uma versão nova do algoritmo, denominado MD6, com hash que tivera tamanhos de 512, 384, 256 ou 224 bits. O MD6 teve tentativa frustrada de participar de um concurso para se tornar o novo algoritmo SHA-3, entretanto, foi retirado do concurso, noticiando ser considerado demasiadamente lento, tendo em vista que os atuais computadores não são tão ágeis para se utilizar o MD6 (Mazzeto, 2018). Sendo assim, abordamos o quesito vulnerabilidade do MD5: Ele executa somente um caminho sobre as informações, se ambos prefixos também forem construídos com o mesmo hash, um sufixo comum pode ser acrescentado aos dois para propiciar uma possível colisão. Dessa maneira é provável que duas strings distintas gerem o mesmo hash. Porém isso não assegura que a partir de uma senha encriptada em uma espicifica hash se obtenha a verdadeira senha, contudo permite uma certa probabilidade de encontrar determinadas senhas através duma checagem de um conjunto amplo de hash de senhas por meio da metodologia de checagem de dicionários (Mazzeto, 2018). Por exemplo, a fim de elevar a o nível de segurança em determinados sistemas, utiliza-se a estratégia de acrescentar algum texto fixo no texto original a fim de ser encriptado. Digamos: se o salt (um dado aleatório) for "wiki" e digamos que a senha seja "1234", a pseudosenha provavelmente será "wiki1234" e mesmo se alguém possuir o MD5 de 1234, por ser uma senha comum, ele não terá a de wiki1234. Todavia, caso o "salt" seja não tão complexo como no supracitado exemplo e houver o MD5 de "wiki1234" é provável que se possa desvendar o salt e dessa maneira desencriptar as senhas mais “banais”. É por isso que comumente o "salt" é algo complexo (Mazzeto, 2018). • Utilidade e Benficio Já que o MD5 não pode ser desencriptado, qual seria então a sua utilidade? Parafraseando, as Message Digests são funções hash que produz um algoritmo de dimensão fixa, em direção única, a partir de dados de tamanho aleatório. Tais códigos hash são muito úteis à integridade de senhas. Por não ser possível desencripta-la, o algoritmo hash precisa ser gerado novamente e aferido com a sequência anteriormente disponibilizada. Se os dois forem iguais, o acesso é liberado (vale, 2007). 12 O beneficio desse tipo de código é que toda hash produzida de um determinado documento será completamente díspar da hash produzida de um outro documento também, se ainda assim a alternância entre ambas as fontes da hash for somente um numero, a hash a ser gerada produz um outro valor. Exemplificando: Este trabalho semestral não será reprovado: BB520CAC1153C977EA66FEC1827A6191 Este trabalho semestral não será reprovado1: 17E3C6E93DEDFB8C6C51AAFE27396279 Note que acrescentando somente o numeral “1” na frase Este trabalho semestral não será reprovado, a hash produzida foi completamente diferente da frase que não apresenta o numeral em seu respectivo fim (Tacio, 2012). Ou seja, para produzir hashs completamente díspares e exclusivas, o MD5 é bem útil para a averiguação e checagem da segurança de qualquer elemento de dado que seja (Tacio, 2012). • Utilizando o MD5 em senhas A utilização do algoritmo em questão para senhas, não é uma ideia muito plausível, já que se trata de uma função muito rápida, logo, existe certa facilidade para um usuário mal intencionado (atacantes, hackers), tentar bilhões de possíveis combinações para senha em questão de segundos. E além disso existem casos famosos de vulnerabilidade e ataques até mesmo contra a própria Microsoft, que ocorreu em 2008, porém não significou grandes riscos para os usuários (Rivest, Abril de 1992).. • Utilizando o MD5 na checagem de integridade de arquivos A utilização do MD5 para este tipo de hipótese é avaliada de acordo com o cenário em questão, já que os ataques contra a criptografia são ataques de “colisão”, ou seja um usuário mal intencionado tiver controle sobre dois arquivos o mesmo pode criar dois arquivos com o mesmo valor Hash. Caso contrário ele não teria êxito na criação de um arquivo com o mesmo Hash de um arquivo que não foi influenciado por ele. (Rivest, Abril de 1992). 13 • Vulnerabilidade Como dito nos tópicos acima, os ataques são de “colisão”, logo os atacantes geram bilhões de probabilidades por segundo até que os conjuntos de hash batam, porém na teoria o MD5 é desenvolvido para que colisões do tipo sejam extremamente difíceis de acontecer. No Brasil a utilização do algoritmo não é permitida, de acordo com a documentação que fala sobre os “padrões” a serem utilizados nos processos de criação de chave de segurança, emissões, solicitações e revogações de certificados digitais no âmbito da ICP- Brasil (Rolim). • Método construção de uma classe para criptografia O primeiro passo deve ser a criação de método estático para que gere um algoritmo sob a criptografia: Em seguida devemos realizar a criação do método de que gere uma chave: Com este passo já feito, devemos criar agora uma forma publica que deve receber o texto a ser criptografado : 14 A codificação completa deve ficar da seguinte forma: Por fim para que conseguíssemos chamar a classe criada, faremos o seguinte passo: (Lucchesi, 1986). 15 Projeto • MD5 O MD5 consisti em uma instrução de hash de 128 bits de única direção feito pela RSA Data Security, Inc., apresentado na RFC 1321, usado por programas com protocolo ponto-a-ponto (P2P), na averiguação de integridade e entradas do sistema. Constituiu o desenvolvimento para substituir o MD4 que tinha determinadas falhas de segurança (Vale, 2007). Por ser um código de única direção, qualquer hash MD5 não pode voltar outra vez na mensagem que o criou. O procedimento de averiguação é feito pela checagem das duas hash (base de dados, e tentativa de login). O MD5 é igualmente utilizado para conferir a integridade de um ficheiro por meio, por exemplo, do software md5sum, que faz uma hash de um ficheiro. Isso tem chance de ser muito útil para downloads de acervos amplos, para softwares P2P que arquitetam o ficheiro por meio de fragmentos e estão sujeitos à quebra de arquivos (Vale, 2007). • C A linguagem C foi desenvolvida tendopor base duas outras linguagens: “BCPL” criada por Martin Richards, e “B” escrita por Ken Thompson. Dennis Ritchie a implementou num computador DEC PDP-11, rodando o sistema operacional UNIX. É uma linguagem de programação de uso geral, empregada no desenvolvimento dos mais diversos tipos de software, de sistema operacional à aplicativos de escritório ou jogos. Uma das virtudes de C é a portabilidade dos códigos-fonte. Isso significa que um programa escrito para um determinado equipamento (computador) ou sistema operacional (DOS, WINDOWS, LINUX, UNIX, SOLARIS) pode ser compilado num equipamento diferente, rodando outro sistema operacional, sem necessidade de muitas alterações. Outra característica da linguagem C, é ser estruturada, de forma semelhante à Ada e Pascal. A linguagem C++ é uma evolução natural da linguagem C, desenvolvida por Bjarne Stroustrup nos laboratórios Bell (AT&T) entre 1983 e 1985. Inicialmente foi chamada de “C com classes”, pois ele havia combinado as classes e a orientação a objetos da linguagem Simula às características de C. Quem conhece C pode sentir-se em casa ao 16 trabalhar com C++. De fato, todas as estruturas da primeira estão presentes na segunda (Oliveira, et al., 2008). Compilador é o programa responsável por transformar o código-fonte de um programa em um arquivo executável. (Oliveira, et al., 2008) No caso, utilizamos o software Dev-C++. O Dev-C++ é uma IDE (Integrated Development Environment) empregado para a elaboração de aplicativos nas linguagens C, C++ e C++ 11 em sistemas operacionais Windows. (SCHIMIDT, 2013) O consumidor deve escolher fazer o download da versão para sistemas 32 bits ou 64 bits. Na primeira situação, o Dev-C++ usa o ambiente MinGW (“Minimalist GNU for Windows”). O MinGW é um conjunto de utensílios gratuitos e open source do GNU, ajustadas para o desenvolvimento de aplicativos no Windows, usando apenas arquivos do próprio sistema. (SCHIMIDT, 2013) O Dev-C++ é avaliado como uma das melhores soluções para a elaboração de programas em linguagem C para Windows, especialmente pela gratuidade. Tem interface gráfica em português e possui funções como autocompletar, realce de sintaxe, debug de código com o gdb e análise dinâmica de código com o gproof (SCHIMIDT, 2013). O programa foi fundamentado no algoritmo do MD5 implementado na linguagem c com algumas melhorias e alterações pequenas. Ele foi dividido em 2 arquivos, o main.c, arquivo principal, e a biblioteca libmd5.h que contêm as funções utilizadas no arquivo principal. • Hardware e sistema operacional Os testes foram rodados no computador com as configurações indicadas abaixo, pode haver alterações em outras maquinas. Sistema operacional: Windows 7 Processador: Pentium Dual-Core E5300 @ 2.60GHz Memória Ram: 2,00 GB Tipo de sistema: Sistema operacional de 32 Bits Toda a pesquisa do projeto utilizou o Google como buscador principal. • Git Git é um sistema de controle de versão de arquivos. Por meio dele podemos criar projetos no qual diferentes pessoas podem colaborar ao mesmo tempo, 17 criando e editando novos arquivos e consentindo que os mesmos possam permanecer sem a preocupação de suas alterações serem sobrescritas. Se não existir um sistema de versão, idealize o caos entre duas pessoas abrindo o um arquivo no mesmo tempo. Um bom emprego do git é exatamente essa, deixar que um arquivo possa ser editado ao mesmo tempo por várias pessoas. Por mais complicado que isso seja, ele tenta manter em ordem para evitar dificuldades para os desenvolvedores. (Schmitz, 2015) • GitHub O Github é um serviço web que proporciona muitas funcionalidades extras aplicadas ao git. Resumindo, você pode usar de graça o github para hospedar seus projetos pessoais. Ademais, projetos/frameworks/bibliotecas sobre desenvolvimento open source estão quase todos no github, e você pode acompanhar por meio de versões atualizadas, contribuir avisando erros ou até mesmo enviando correções e códigos (Schmitz, 2015). O Github foi utilizado para hospedar o projeto da aps para que o grupo faça as alterações em tempo real e para que temos uma interface onde temos o relatório de tudo que foi feito e modificado assim caso haja algum tipo de imprevisto. A ferramenta Github, em auxilio com o sistema Git no back-end, facilita que possamos refazer ou recuperar o projeto através de um ponto de restauração chamado commit. 18 Bibliografia Adão John Mario Rinaldini A FUNÇÃO DO ALGORITMO HASH MD4 [Artigo] // .... - 13 de 06 de 2015. - p. 8. Cormen Thomas h. Algoritmos [Livro]. - 2002. Lucchesi C. L. Introdução à Criptografia Computacional [Livro]. - UNICAMP : Papirus, 1986. Mazzeto Muriel http://www.brunoribas.com.br [Online] // http://www.brunoribas.com.br. - 27 de Outubro de 2018. - 27 de 10 de 2018. - http://www.brunoribas.com.br/sc/2016-1/cripto/muriel-hash.pdf. Oliveira Ecila e Viana Antonio Noginfo [Online] // Noginfo. - 1 de Fevereiro de 2008. - http://www.noginfo.com.br/moodle/mod/resource/view.php?id=5544. Oliveira Fernando Entendendo a criptografia RSA [Livro]. - 2012. Rivest R. [Livro]. - [s.l.] : Net Working Group, Abril de 1992. Rolim Gerson [Livro]. SCHIMIDT EMANUEL Techtudo [Online] // Techtudo. - 30 de Julho de 2013. - https://www.techtudo.com.br/tudo-sobre/orwell-dev-c.html. Schmitz Daniel Tableless [Online] // Tableless. - 07 de Outubro de 2015. - https://tableless.com.br/tudo-que-voce-queria-saber-sobre-git-e-github-mas-tinha- vergonha-de-perguntar/. Tacio Paulo http://www.mundodoshackers.com.br [Online] // http://www.mundodoshackers.com.br. - 02 de Abril de 2012. - 27 de Outubro de 2018. - http://www.mundodoshackers.com.br/como-gerar-e-checar-hashs-md5. Vale Christiano Rodarte Devmedia [Online] // DEVMEDIA. - 21 de Fevereiro de 2007. - https://www.devmedia.com.br/criptografia-md5/2944. vale Cristiano Rodarte https://www.devmedia.com.br [Online] // https://www.devmedia.com.br. - 08 de Janeiro de 2007. - 27 de Outubro de 2018. - https://www.devmedia.com.br/criptografia-md5/2944. 19 Pseudocódigo Var // Seção de Declarações das variáveis // Configuração da Chave para criptografia em md5 CHAVE[]="AbCd": caractere TAM_CHAVE=strlen(CHAVE): inteiro //---------------------------------------- // Vetor de entrada do texto a ser criptografado em md5 TEXTO[100000]: caractere TAM_TEXTO=100000: inteiro TEXTO_CRIPT vetor [0...100000] de inteiro //---------------------------------------- CHAVE_int: inteiro i, aux, valor, pos_chave, pos_texto, opcao: inteiro palavra[100], aux[TAM_TEXTO], pause: caractere Inicio // Seção de Comandos, procedimento, funções, operadores, etc... // Bool é um tipo de dados que só aceita 2 valores, true ou false bool Criptografar() // strlen determina o tamanho de uma string para i de 0 até strlen (TEXTO) passo 1 faca TEXTO_CRIPT[i] <- TEXTO[i] fimpara para aux de 0 até srtlen(TEXTO) faca para i de 0 ate strlen(TEXTO) passo 1 faca //TEXTO_CRIPT[aux] = TEXTO_CRIPT[aux] * CHAVE[i] CHAVE_int <- CHAVE[i] TEXTO_CRIPT[aux] <- TEXTO_CRIPT[aux] * CHAVE_int aux <- aux + 1 20 fimpara fimpara retorna verdadeiro bool Descriptografar() FILE *arquivo // Cria um arquivo de texto para leitura e escrita arquivo = fopen("c:\\criptmd5\\arquivos_recebidos\\criptografado.txt","r") se (arquivo==NULL) entao retorna falso fimse pos_chave <- 0 pos_texto <- 0 enquanto (!feof (arquivo)) faca fscanf (arquivo,"%d",&valor)// Armazenar a variavel valor no arquivo valor <- valor / CHAVE[pos_chave] //valor = valor / CHAVE[pos_chave] TEXTO[pos_texto] <- (char)valor pos_texto<- pos_texto +1 se (pos_chave==TAM_CHAVE-1) entao pos_chave <- 0 senao pos_chave<- pos_chave + 1 fimse fimenquanto fclose (arquivo) // Fecha o arquivo aberto anteriormente retorna verdadeiro // ----------------------------------------- Menus void Recebe_texto (char tipo[]) 21 bool ok FILE *arquivo //Cria um arquivo de texto para leitura e escrita se (strcmp (tipo,"msg")==0) entao //Verifica se textos são iguais escreval ("Receber texto para criptografar") escreval ("Digite o texto: ") leia (aux) se ( strlen(aux) <- TAM_TEXTO) entao strcpy (TEXTO,aux) escreval ("Texto recebido com sucesso!") escreval ("Criptografando texto...") ok <- verdadeiro senao escreval ("Erro! Tamanho do texto excede o limite de caracteres") ok <- falso fimse fimse se (strcmp(tipo,"arquivo")==0) entao escreval ("Instrucoes para importar um arquivo de texto:") escreval (" 1 - Renomeie o arquivo para 'original.txt'") escreval (" 2 - Copie o arquivo para a pasta que sera aberta a seguir") escreval (" 3 - Feche o explorador e retorne a aplicacao") escreval (" Pressione Enter para abrir a pasta") leia (pause) setbuf (stdin,NULL) system ("explorer c:\\criptmd5\\arquivos_originais\\" escreval ("Pressione enter apos colar o arquivo na pasta...") leia (pause) setbuf (stdin,NULL) escreval ("Importando arquivo...") 22 arquivo = fopen("c:\\criptmd5\\arquivos_originais\\original.txt","r") se (arquivo==NULL) entao escreval ("Erro ao abrir o arquivo...") senao enquanto (!feof(arquivo)) faca // Escreve no arquivo a variavel palavra fscanf (arquivo,"%s",palavra) strcat (aux," ") strcat (aux,palavra) fimenquanto fclose (arquivo) //Fecha arquivo se ( strlen(aux) <= TAM_TEXTO) entao strcpy (TEXTO,aux) escreval ("Texto recebido com sucesso!") escreval ("Criptografando texto...") ok=verdadeiro senao escreval ("Erro! Tamanho do texto excede o limite de caracteres") ok=falso senao escreval ("Erro ao receber texto") fimse fimse fimse se (ok) entao se (Criptografar()) entao escreval ("Texto criptografado com sucesso!") arquivo = fopen("c:\\criptmd5\\arquivos_gerados\\criptografado.txt","wt") se (arquivo==NULL) entao 23 escreval ("Erro ao criar o arquivo...") senao para i de 0 ate slrlen (TEXTO) passo 1 faca fprintf (arquivo,"%d ",TEXTO_CRIPT[i]) fimpara fclose (arquivo) escreval ("Pressione enter para abrir a pasta do arquivo gerado!") leia (pause) setbuf (stdin,NULL) system ("explorer c:\\criptmd5\\arquivos_gerados\\") senao escreval ("Nao foi possivel criptografar o texto!") fimse fimse fimse void Receber_Arquivo_cript () escreval ("Instrucoes para importar um arquivo criptografado:") escreval (" 1 - Renomeie o arquivo para 'criptografado.txt'") escreval (" 2 - Copie o arquivo para a pasta que sera aberta a seguir") escreval (" 3 - Feche o explorador e retorne a aplicacao") escreval (" Pressione Enter para abrir a pasta") leia (pause) setbuf (stdin,NULL) system ("explorer c:\\criptmd5\\arquivos_recebidos\\") escreval ("Pressione enter apos colar o arquivo na pasta...") leia (pause) setbuf (stdin,NULL) escreval ("Importando arquivo...") se ( Descriptografar() ) entao 24 escreval (" Arquivo descriptografado com sucesso!") escreval (TEXTO) senao escreval (" Nao foi possivel descriptografar o arquivo!") fimse void Menu_Criptografar() escreval ("\tCriptografar em MD5") escreval (" Criptografar texto ou arquivo") escreval (" 1 - Digitar texto") escreval (" 2 - Importar arquivo de texto (txt)") escreval (" 3 - Voltar ao menu principal") escreval (" Informe a opcao desejada: ") leia (opcao) setbuf(stdin,NULL) escolha (opcao) caso 1: Recebe_texto("msg") caso 2: Recebe_texto("arquivo") caso 3: outrocaso: escreval("Opcao invalida! Tente novamente...") fimescolha void Menu() enquanto (1) faca escreval ("Criptografar em MD5") escreval (" 1 - Criptografar texto ou arquivo") escreval (" 2 - Receber arquivo") 25 escreval (" 3 - Sair") escreval (" Informe a opcao desejada: ") leia (opcao) setbuf (stdin,NULL) escolha (opcao) caso 1: Menu_Criptografar() caso 2: Receber_Arquivo_cript() caso 3: escreval ("Finalizando...") sair(0) outrocaso: escreval ("Opcao invalida! Tente novamente...") fimescolha Fimalgoritmo 26 Fluxograma 27 28 29 30 31 32 33 34 35
Compartilhar