Buscar

APS Ciencia da computação 2 sem

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

Continue navegando