• Nenhum resultado encontrado

Aulas de PHP Criptografia com Cifra de César. Paulo Marcos Trentin

N/A
N/A
Protected

Academic year: 2021

Share "Aulas de PHP Criptografia com Cifra de César. Paulo Marcos Trentin"

Copied!
29
0
0

Texto

(1)

Aulas de PHP – Criptografia com

Cifra de César

Paulo Marcos Trentin

[email protected]

(2)

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.

(3)

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:

(4)

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.

(5)

Cifra de César - criptografando

Percebemos que a palavra ZAIRA criptografada com 3 casas de afastamento é CDLUD.

(6)

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.

(7)

Cifra de César - descriptografando

Percebemos que a palavra CDLUD descriptografada com 3 casas de afastamento é ZAIRA.

(8)

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:

(9)

Cifra de César – tabela de códigos

HTML usada pelo PHP

(10)

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)

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:

(12)

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.

(13)

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.

(14)

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:

(15)

Implementando

César

de Cesar com PHP

(16)

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:

(17)

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:

(18)

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.

(19)

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.

(20)

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:

(21)

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:

(22)

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 32 vezes.

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:

(23)

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.

(24)

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:

(25)

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:

(26)

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,

(27)

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:

(28)

Resultado final

Por fim, podemos então exibir todos os valores, e veremos o resultado de nosso programa no navegador:

(29)

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.

Referências

Documentos relacionados

2. Identifica as personagens do texto.. Indica o tempo da história. Indica o espaço da história. Classifica as palavras quanto ao número de sílabas. Copia do texto três

Em janeiro, o hemisfério sul recebe a radiação solar com menor inclinação e tem dias maiores que as noites, encontrando-se, assim, mais aquecido do que o hemisfério norte.. Em julho,

La inclusión de los derechos humanos de las personas con dis- capacidad como cuestión concreta de política en documentos como la Declaración y Programa de Acción de Viena aprobada

Nessa situação temos claramente a relação de tecnovívio apresentado por Dubatti (2012) operando, visto que nessa experiência ambos os atores tra- çam um diálogo que não se dá

Também, são definidos alguns conceitos, tais como: criptografia simétrica, criptografia assimétrica ou de chave pública, cifra de fluxo e cifra de blocos,

6 Consideraremos que a narrativa de Lewis Carroll oscila ficcionalmente entre o maravilhoso e o fantástico, chegando mesmo a sugerir-se com aspectos do estranho,

Uma simulação da deformação da cavidade em função tração aplicada à fibra é importante no sentido de determinar os parâmetros iniciais do sistema

Financiar empresas para aplicação no desenvolvimento de novos produtos, processos ou serviços bem como o aprimoramento dos já existentes, inovação em marketing ou