Aulas de PHP Criptografia com Cifra de César. Paulo Marcos Trentin paulo@paulotrentin.com.br http://www.paulotrentin.com.br



Documentos relacionados
WEBDESIGN. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

JavaScript. JavaScript é uma linguagem de script usada em navegadores web. É uma linguagem dinâmica, estruturada e orientada em objetos.

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

1. Introdução ao uso da calculadora

WEBDESIGN. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

2 echo "PHP e outros.";

Aritmética Binária e. Bernardo Nunes Gonçalves

Criando um script simples

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

WEBDESIGN. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

Trabalho Final. Data da Submissão: das 8h do dia 16/06 às 24h do dia 17/06. Data da Entrega do Relatório: das 15h às 18h no dia 18/06.

INTRODUÇÃO À TECNOLOGIA SERVLETS

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Lógica de Programação

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

Álgebra A - Aula 11 RSA

WEBDESIGN. Professor: Paulo Trentin Escola CDI de Videira

Fluxo de trabalho do Capture Pro Software: Indexação de código de barras e separação de documentos

Instalação do Wordpress. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Copyright 2013 VW Soluções

Conversão de Bases e Aritmética Binária

Organização de Computadores. Cálculos Binários e Conversão entre Bases Aritmética Binária

Resumo da Matéria de Linguagem de Programação. Linguagem C

Assinatura Digital: problema

Características do PHP. Começando a programar

PÓS-GRADUAÇÃO EM MATEMÁTICA COMPUTACIONAL INFORMÁTICA INSTRUMENTAL

FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA. Módulo de Programação Prof. Bruno Maciel

O coeficiente angular

Exemplo de Subtração Binária

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

JDBC Java Database Connectivity

Introdução aos critérios de consulta. Um critério é semelhante a uma fórmula é uma cadeia de caracteres que pode consistir em

Google Drive: Acesse e organize seus arquivos


Notas de Cálculo Numérico

Trabalho compilado da Internet Prof. Claudio Passos. Sistemas Numéricos

Professor: Paulo Macos Trentin Escola CDI de Videira 4/6/2011 1

20 Caracteres - Tipo char

¹CPTL/UFMS, Três Lagoas, MS,Brasil, ²CPTL/UFMS, Três Lagoas, MS, Brasil.

A importância da Senha. Mas por que as senhas existem?

Estruturas (Registros)

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Desenvolvendo Websites com PHP

Tutorial de Matlab Francesco Franco

RESOLUÇÃO DAS QUESTÕES DE RACIOCÍNIO LÓGICO-MATEMÁTICO

CRIPTOGRAFIA: UMA APLICAÇÃO DA MATEMÁTICA DISCRETA ATRAVÉS DA IMPLEMENTAÇÃO DA CIFRA DE CÉSAR EM VISUALG

Algoritmos em Javascript

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 13

Conceitos Importantes:

IFSC-Programação para a WEB - prof. Herval Daminelli

Como Gerar documento em PDF com várias Imagens

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Múltiplos Estágios processo com três estágios Inquérito de Satisfação Fase II

Conhecendo um pouco de matrizes e determinantes

Estrutura de Dados Básica

Abaixo você conhecerá algumas técnicas de SEO utilizadas para obter grande sucesso com as postagens no WordPress.

Fluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção

Equações do primeiro grau

Certificado Digital: Como Funciona (

Na tela dele, clique no sinal de + ao lado do nome do seu computador, para expandi-lo. A seguir, expanda também o item "Sites da web".

Manual de configuração do sistema

FÓRMULAS DO EXCEL QUE SALVARAM MEU EMPREGO

Questão Essência do Excel

Núcleo de Tecnologias Interativas de Aprendizagem.

Computadores XXI: Busca e execução Final

Introdução aos cálculos de datas

A equação do 2º grau

Instalando o WordPress em localhost

Curso de Programação Computadores

O GEM é um software 100% Web, ou seja, você poderá acessar de qualquer local através da Internet.

REDES DE COMPUTADORES E TELECOMUNICAÇÕES MÓDULO 13

Microsoft Excel 2007

Internet e Programação Web

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Tutorial para envio de comunicados e SMS

Programação WEB II. Sessions e Cookies. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

Linguagem algorítmica: Portugol

DEFINIÇÃO DE MÉTODOS

Dicas de uso para Cloud Computing

Criando, inserindo e exibindo PHP+MySql

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

Scriptlets e Formulários

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

WebDesign. Professor: Paulo Trentin Escola CDI de Videira

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

Banner Flutuante. Dreamweaver

JAVA NETBEANS PGOO Prof. Daniela Pires Conteúdo

Exercícios Teóricos Resolvidos

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

Tutorial Gerar arquivo PDF. Gerando um documento pdf com várias imagens 1- Inserir imagem no Word

Transcrição:

Aulas de PHP Criptografia com Cifra de César Paulo Marcos Trentin paulo@paulotrentin.com.br http://www.paulotrentin.com.br

Cifra de César com ISO-8859-1 A cifra de Cesar existe há mais de 2000 anos. É muito simples de entender, implementar e decodificar. Existem vários exemplos de seu funcionamento na internet, porém aqui estudaremos com suporte ao padrão de codificação ISO-8859-1 para que assim possamos cifrar qualquer texto em português. Codificação ISO-8859-1: http://pt.wikipedia.org/wiki/iso_8859-1 11/8/2011 2

Cifra de César - funcionamento Para usar a Cifra de César, basta substituirmos uma letra do alfabeto por n letras a frente. Para n = 3, temos A valendo D. Vamos entender melhor. Primeiro atribuímos valores aos caracteres de um alfabeto conhecido: Cifra decésar: http://pt.wikipedia.org/wiki/cifra_de_césar 11/8/2011 3

Cifra de César - criptografando Depois, tendo definido a quantia de algarismos n que iremos deslocar, somamos ela ao valor de cada caractere do texto. O valor de Z é 25, portanto será 28. Basta então fazer o valor resultante da soma, neste caso 28, pelo módulo da quantia de caracteres do alfabeto, neste caso 26 (0... 25) e teremos o código do próximo caractere. Por último precisamos apenas encontrar o caractere pelo código e por fim exibí-lo. Teremos então a completa codificação seguindo a Cifra de César. Veja na página a seguir o resultado gráfico da cifragem. 11/8/2011 4

Cifra de César - criptografando Percebemos que a palavra ZAIRA criptografada com 3 casas de afastamento é CDLUD. 11/8/2011 5

Cifra de César - descriptografando Para descriptografar o texto, basta sabermos quantas casas devemos subtrair, o nosso n, que neste caso é 3. O valor de L é 11, portanto será 8. Basta então obter o valor resultante da subtração, neste caso 8 e teremos o código do próximo caractere. Caso esse valor seja menor que 0, precisamos subtrair a soma de caracteres do alfabeto, neste caso 26, pelo valor resultante do cálculo feito (letra C da tela seguinte). Por último precisamos apenas encontrar o caractere pelo código e por fim exibí-lo. Teremos então a completa decodificação seguindo a Cifra de César. Veja na página a seguir o resultado gráfico do que foi visto acima. 11/8/2011 6

Cifra de César - descriptografando Percebemos que a palavra CDLUD descriptografada com 3 casas de afastamento é ZAIRA. 11/8/2011 7

Cifra de César - completa O alfabeto visto anteriormente, contém apenas caracteres maiúsculos e sem acentuação, portanto é bastante incompleto caso queremos cifrar uma mensagem completa. Para termos um sistema completo, precisamos aumentar nosso alfabeto conhecido, adicionando à ele os caracteres que faltam. O problema é que faltam todos os acentos, caracteres especiais e em caixa baixa, portanto passaríamos muito tempo fazendo nosso alfabeto! A solução simples é usar a codificação da tabela de códigos HTML que já possui valores numéricos para cada caractere conhecido: 11/8/2011 8

Cifra de César tabela de códigos HTML usada pelo PHP A tabela completa pode ser obtida em: http://www.lookuptables.com/ 11/8/2011 9

Tabela HTML com PHP obtendo código de um caractere Para obter o código de um caractere com PHP, precisamos usar a função ord padrão do PHP, passando por parâmetro o caractere que se deseja obter o código: 11/8/2011 10

Tabela HTML com PHP obtendo caractere a partir de um código Para obter o caractere de um código com PHP, precisamos usar a função chr padrão do PHP, passando por parâmetro o código que se deseja obter o caractere: 11/8/2011 11

Cifra de César Novo Alfabeto Agora que temos em mãos todos os códigos da tabela HTML que o PHP usa, temos um alfabeto conhecido de quase 256 caracteres! Isso nos permite codificar qualquer frase, com quaisquer códigos e exibí-la codificada para o usuário. Com a exibição codificada, poderemos então decodificá-la sem problemas. Existe, porém, uma limitação nesta tabela que veremos agora e então aprenderemos como contornar esta limitação. 11/8/2011 12

Limitação Tabela de códigos HTML Podemos ver que até o trigésimo segundo caractere (espaço) não temos uma definição correta do que será exibido de acordo com o código passado. Por exemplo, qual é o caractere do código 15? Se testar com a função chr vista anteriormente, verá que nada é retornado para o navegador. Vemos então, que do código 0 ao 31, não podemos atribuir nenhum símbolo, pois ele não aparecerá em nosso browser. 11/8/2011 13

Limitação Tabela de códigos HTML contornando o problema Para resolver esse problema, iremos deixar de fora de nosso alfabeto qualquer caractere com código entre 0 e 31, ou seja, um total de 32 caracteres. Veja a ilustração abaixo: 11/8/2011 14

Implementando César de Cesar com PHP Crie um projeto no NetBeans e insira o seguinte código nele: 11/8/2011 15

Implementando Cifra de César com PHP Agora vamos definir as variáveis responsáveis por armazenar a frase a ser criptografada, armazenar o código criptografado e armazenar o código descriptografado. Seguem respectivamente: 11/8/2011 16

Implementando Cifra de César com PHP O próximo passo é percorrer pela variável que contém a frase a ser criptografada, e acessar cada caractere individualmente. Uma string é um conjunto de caracteres em um vetor, logo acessamos cada caractere a partir do índice 0 até o tamanho do vetor 1. A função strlen do PHP nos retorna o tamanho do vetor de caracteres. Portanto o valor de i varia de 0 até tamanho_do_vetor 1: 11/8/2011 17

Implementando Cifra de César com PHP Para cada caractere, $acriptografar[$i], obtemos seu código da tabela HTML através da função nativa do PHP, ord. Suponhamos que estamos na segunda iteração do laço for, o valor de $i será 1, portanto $acriptografar[1], retornará para nós o caractere r. Seguindo em frente, o caractere r será passado por parâmetro para a função ord que retornará seu código, neste caso 114. 11/8/2011 18

Implementando Cifra de César com PHP Tendo o valor do caractere em inteiro, agora podemos somar ao valor de casas a avançar, que neste exemplo foi 4 (definido na variável n acima). Teremos então um novo código: 114 + 4 = 118 que corresponde ao caractere v da tabela de códigos HTML. 11/8/2011 19

Implementando Cifra de César com PHP Calculamos então o módulo entre o novo código e o tamanho do alfabeto conhecido, tendo: 118 MOD 256 Se o dividendo (118) for menor que o divisor (256), então o módulo (%) irá retornar o valor do dividendo. Operadores Aritméticos em php: http://www.php.net/manual/pt_br/language.operators.arithmetic.php 11/8/2011 20

Implementando Cifra de César com PHP Devemos assegurar que o valor convertido não esteja na faixa de valores inválidos: 0 31. Caso o novo código esteja nesta faixa, precisamos somar a quantia de valores necessários para tirá-lo desta faixa, neste caso o valor da variável $fora que é 32: O valor de exemplo 118 está fora dessa faixa. 11/8/2011 21

Implementando Cifra de César com PHP Mas e se estivéssemos o valor do novo cálculo sendo o número 3? O código visto anteriormente iria deslocá-lo $fora vezes para frente, neste exemplo são 32vezes. Isso irá fazer com que em vez de pegarmos o caractere de código 3 na tabela HTML, iremos pegar o de código 35: 11/8/2011 22

Implementando Cifra de César com PHP Basta convertermos em caractere o valor referente ao novo código usando a função, vista anteriormente, chr. Por fim, precisamos concatenar este caractere à variável $criptografada, que conterá toda a frase criptografada. Veja na linha 32 que fechamos o nosso for, criado na linha 14. 11/8/2011 23

Implementando Cifra de César com PHP Se exibirmos os valores das variáveis $acriptografar e $criptografada, respectivamente, obteremos a seguinte saída em nosso navegador: 11/8/2011 24

Implementando Cifra de César com PHP O processo reverso à criptografia, é muito semelhante, portanto darei ênfase em apenas algumas partes. Veja na linha 45, que em vez de somarmos, estamos subtraindo valores, caso o novo código esteja na faixa de exclusão: 11/8/2011 25

Implementando Cifra de César com PHP Aqui temos a maior diferença. Um código ($novocodigo) de caractere jamais pode ter valores negativos. Devido ao retrocesso causado no if anterior, isso pode ocorrer. Nestes casos precisamos então subtrair o tamanho do alfabeto pelo valor do código. Desta forma teremos então um valor positivo, correspondente ao código correto e fora da faixa de exclusão! 11/8/2011 26

Implementando Cifra de César com PHP Da mesma forma do loop que criptografa, iremos concatenar os caracteres na variável correspondente, neste caso $descriptografada. Repare o fechamento do for na linha 56: 11/8/2011 27

Resultado final Por fim, podemos então exibir todos os valores, e veremos o resultado de nosso programa no navegador: 11/8/2011 28

Conclusão Conhecer a Cifra de César é o básico para quem deseja se aventurar no mundo da criptografia, afinal, como podemos ver ela é muito simples de se entender e aplicar. Porém, devido sua simplicidade, temos também sua insegurança. Um indivíduo com experiência em criptografia iria perceber em pouco tempo os padrões e então descobrir o código secreto de sua aplicação. Portanto, use esse tutorial apenas para testes e aprendizagem, jamais confie que uma informação está segura com a técnica vista aqui. Para melhorar a segurança de informações que irão usar meios públicos para transmissão, pesquise por criptografia assimétrica. 11/8/2011 29