0

Métodos e Analise de Criptografia PHP

criado por Diego em 06/11/2008 9:42am
Hoje em dia, dispomos cada vez mais de novas tecnologias para a implementação da segurança em scripts. Existem caso em que segurança se faz necessária em um código, ex: Sistema de Login, Dados Sigilosos, etc...

Tipos de Criptografia

MD5: Retorna um hash de 32 caracteres hexadecimal.

Vantagens: Ótima Criptografia.
Desvantagens: Por conter um hash de 32 caracteres, fica muito dificil de descriptografar o mesmo. Não sendo possível utilizar funcoes do php pronta para retornar ao valor inicial. Hoje em dia existem sites que tentam a descriptografia, porém a mesma não funciona quando o valor inicial criptgrafado é muito grande (extenso).

Modo de Usar:
<?php
$valor_criptografado = md5($valor);
?>

SHA1: Utiliza criptografia com hash de 40 caracteres hexadecimais

Vantagens: Mais segurança que o MD5
Desvantagens: Por conter um hash muit extenso, assim como o md5, é mais fácil utilizar apenas a com,paracoes de hash em sistemas que fazem uso desta tecnologia.

Modo de Usar:
<?php
$valor_criptografado = sha1($valor);
?>

Base 64: Codifica dados em hash MIME base64
Vantagens: è possível a descriptografia por funções
Desvantagens: Criptografia fraca, e de fácil descriptografia.

Modo de usar:

Criptografia:
<?php
$valor_codificado = base64_encode($valor);
?>

Descriptografia
<?php
$valor = base64_decode($valor_codificado);
?>

Comentários:

Mostrando 1 - 10 de 12 comentários
Adriano disse:
Foi útil pra mim, valeu!!
25/05/2010 9:36pm (~6 anos atrás)

Pq em vez de ficarem criticando o post do cara não fazem um mais completo e coloca aqui?!?! Criticar é fácil.. difícil é tirar o pé do sofá pra escrever neh! O cara todo cheio de vontade tentando ajudar.. as vezes ele nem conheçe tanto assim mas tá tentando ueh!!! Vão fazer alguma coisa que presta e deixa o post do cara em paz!
07/05/2009 5:28pm (~7 anos atrás)

Alex Weber disse:
Seguem mais opções pra rapaziada que quer saber mais sobre hashing no PHP:

MD5 e SHA1 são simplezinhos e não muito seguros, já o Base64 nem deveria ser utilizado para estes fins.

Mas você não precisa se limitar a estes 3 métodos, o PHP possui uma ampla gama de algoritmos de criptografia.

Para saber quais execute a funcão hash_algos() que retornará um array contendo os nomes do algoritmos disponíveis (tem sha256, whirpool, aes, serpent, etc)

Depois para usar qualquer um deles execute a função hash(), passando o nome do algoritmo e o texto a ser criptografado como parâmetros.

Exemplo:
$foo = 'teste123';
$bar = hash('sha256',$foo);

Assinatura das Funções:
array hash_algos(void)
string hash (string $algo, string $data [, bool $raw_output= false])

OBS: se o último flag opcional (raw_output) for habilitado a função retornará em binário, caso contrário o padrão é hexadecimal.

Abs,

Alex
06/04/2009 10:51am (~7 anos atrás)

desculpem ... quando disse "Se não for usar comparação de dados.." quis dizer na finalidade ... hash eh bom ser usado para comparar valores como senha ... para caso alguem consiga acessar seus dados n terem como saber qual a senha do cliente. VLW Desculpem!
17/03/2009 1:29pm (~7 anos atrás)

Desculpe, mas este site tem um ótimo conteúdo para pesquisa. Então vamos lá. Estava a pesquisar o seguinte. HASH <> or != DECRIPTOGRAFIA (CRIPTOGRAFIA-DECRIPTOGRAFIA). Portanto não existe HASH E DEHASH.

Como diz o meu amigo ali em cima o Valor gerado por hash não tem como retornar ao valor original. EX:

SHA1() e MD5().

Exemplo de Criptografia(Criptografa e decriptografa)

Base64_encode()
ex: $valor='oi';
echo base64_encode($valor);
// vai sair uma penca de numeros ex: 359==z


Base64_decode()
ex: você pega este valor e usa o decode

echo base64_decode('359==z');

//irá retornar oi



//// Se não for usar comparação de dados... tipo uma senha... use para senha SHA1 e grave a senha em SHA1 em seu banco de dados. Em um sistema de login faça o hash da senha que ele enviou pelo formulário e compare na tabela.^^

//// Se for usar a criptografia por base64, eu aconselho usar algumas "arte"&"manhas" ^^...

/// pegue a string inverta ela e depois use o base64, após isso troque os primeiro caracter pelo último, vc tera um valor. Para decripta-lo basta fazer o processo inverso com o decode ... pois se forem usar o base64 direto ira retornar um valor diferente...eh umas das formas de melhorar um pouco a criptação. Ai eh so brincar!

Desculpem os erros mas foi digitado muito rápido. Aproveitei para aplaudir de pé os moderadores. Aprendi a programar muito melhor lendo os artigos e visualizando o conteúdo ... meu site ... www.alexandremattos.com.br. Tem algumas dicas usadas lá!

Um abraço a todos e qualquer dúvida so mandar um e-mail.

xandin-sf@hotmail.com

Vlww By XandynN
17/03/2009 1:25pm (~7 anos atrás)

Ricardo Gama disse:
O marcos régis está super certo no que diz.

É impossível voltar um MD5. Força bruta é totalmente diferente de descriptografia. Tente voltar uma string de 500 bytes. Se conseguir me fale.

E quanto ao artigo, tbm achei que podia ter tido uma abordagem maior, mas tbm concordo com o João, que tem gente que nem isso sabe.

Agora, procure saber quando falar. Isso acaba gerando confusão nos mais leigos!!!
09/11/2008 11:59am (~8 anos atrás)

Marcos Regis disse:
Prado,
é verdade quanto ao fato de já existir no momento do POST do artigo de paginação outro com o mesmo ASSUNTO mas não era o mesmo CONTEÚDO. Eu sempre procuro não ficar incluindo coisas que já existam.

Diego,
Vou te dar um exemplo bem simples pra vc entender
md5 é um algoritmo que calcula um hash para uma string. Independente do tamanho original o resultado será sempre uma string de 32 bytes.
Agora imagine que vc passou uma string de 2000 caracteres, não há como a partir de 32 bytes voltar a 2000 bytes.
O próprio algoritmo é definido como de mão única.
Todo algoritmo que gera HASH é de mão unica.

Geralmente se usa um HASH para criar mecanismos de criptografia como um cipher.

E mantenho a crítica. Pior do que não ter informação é ter informação errada.
Como dizia Raul Seixas : 'Eu era mais feliz quando era burro'
07/11/2008 2:03pm (~8 anos atrás)

Hash é uma coisa...
Criptografia é outra coisa...
07/11/2008 9:23am (~8 anos atrás)

Rafael Costa disse:
Em primeiro lugar hashing é diferente de criptografia. Se tu rodar um md5('1234') o resultado vai ser sempre o mesmo. Basta tu ter uma lista de resultados gerados e voilà, você quebra a "encriptação".

Segundo, de nada adianta querer criptografar algo se existe o perigo de colisão. Colisão de hash é a propriedade em que duas strings diferentes geram o mesmo hash. TODAS as funções de hash possuem colisão, em maior ou menor grau. É matematicamente impossível evitar colisões.

Terceiro - especialmente pro Diego - hash é SIM um algoritmo de mão única. Utilizar força bruta ou uma base de dados com trocentas combinações de hash/string de origem não caracterizam isso com decriptação.

Sinta-se à vontade de voltar a string original do seguinte hash e publicar aqui pra gente: c13e53dd4742a2f604b1482e0c571803 - o mesmo foi gerado com md5().
07/11/2008 4:57am (~8 anos atrás)

Diego disse:
Caro marcos, sinto muito te revelar, mas hash não é criptografia de mão única! Existe um modo sim de voltar ao original!
07/11/2008 3:53am (~8 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)