sublyer 0 Denunciar post Postado Fevereiro 13, 2006 Bom tem uma função no PHP que transforma strings em MD5, mas como eu faço pra ele me retornar o valor antigo da string?Por exemplo:$string='Teste';$string_convertida=md5($string);$md5_normal=?Quem puder me ajudar eu agradeco desde ja .. Compartilhar este post Link para o post Compartilhar em outros sites
Maykon Silva 0 Denunciar post Postado Fevereiro 13, 2006 O MD5 é uma criptografia que não tem volta. Para verificar strings com MD5 você dar novamente um MD5 na string que você quer verificar. Esta função é muito utilizada em Senhas no banco de dados. Por exemplo: Quando for cadastrar um novo usuário no banco você pega a senha que ele passou e aplica o MD5 nela: $senha = $_POST['senha']; $senha = md5($senha); Depois, no momento em que o usário for fazer o login você deve pegar a senha que ele passou, aplicar o MD5 nela, e aí sim comparar com a existente no banco. Entendeu??? http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
Demaso 0 Denunciar post Postado Fevereiro 13, 2006 Cara, me interessei, ce podia explicar melhor como aplicar e como voltar? Valeu!! Compartilhar este post Link para o post Compartilhar em outros sites
Thomas Couto 0 Denunciar post Postado Fevereiro 13, 2006 ----------------->Não tem volta a função MD5...Mas é curioso nao ter volta, por exemplo, uma string x = "Thomas"; se eu fizer md5(x); sempre ela retorna o mesmo valor :D Acho que entenderam o que eu quis dizer...Mas tambem se tivesse volta nao ia ter sentido usar pra chavear senhase se for pra comparar, é só fazer a comparação dos md5's... :) Compartilhar este post Link para o post Compartilhar em outros sites
sublyer 0 Denunciar post Postado Fevereiro 13, 2006 Teria outro tipo de função de criptografia que desse pra encriptar e decriptar? Compartilhar este post Link para o post Compartilhar em outros sites
Angellis 0 Denunciar post Postado Fevereiro 13, 2006 Realmente interessante.Se volta sempre o mesmo valor, é engraçado não poder chegar ao valor original.Eu já vi o uso do MD5 para esse tipo de comparação de senhas. Mas realmente que tipo de aumento na segurança isso proporciona?Grato, Compartilhar este post Link para o post Compartilhar em outros sites
Demaso 0 Denunciar post Postado Fevereiro 13, 2006 Cara, tenho quase certeza que tem como voltar... E tenho quase certeza também que não é nada seguro!Seria seguro só pra algum usuário final que conseguisse ver o banco de dados e visse aqueles 32 valores e não entendesse nada... Mas se ele souber que existe o MD5 ele pode simplismente voltar o valor...Isso tudo é suposição minha... Gostaria de mais esclarecimentos de qual a vantagem de se usar MD5 e qual seria uma alternativa mais segura... Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Fevereiro 13, 2006 Mas é curioso nao ter volta, por exemplo, uma string x = "Thomas"; se eu fizer md5(x); Faz assim agora: $x = "Thomas"; $y = "Thomaz"; echo md5($x); echo "<br>"; echo md5($y); Cara, tenho quase certeza que tem como voltar... E tenho quase certeza também que não é nada seguro! Seria seguro só pra algum usuário final que conseguisse ver o banco de dados e visse aqueles 32 valores e não entendesse nada... Mas se ele souber que existe o MD5 ele pode simplismente voltar o valor... Isso tudo é suposição minha... Gostaria de mais esclarecimentos de qual a vantagem de se usar MD5 e qual seria uma alternativa mais segura... Se quiser entender melhor e falar com um pouco mais de enbasamento sobre o assunto, pode ler isto aqui. http://www.faqs.org/rfcs/rfc1321 Aproveitando... Leia aqui: http://en.wikipedia.org/wiki/Md5 E aqui: http://pt.wikipedia.org/wiki/MD5 Compartilhar este post Link para o post Compartilhar em outros sites
sublyer 0 Denunciar post Postado Fevereiro 13, 2006 Consegui criptografar e descriptografar. Essas são as funções function get_rnd_iv($iv_len){ $iv = ''; while ($iv_len-- > 0) { $iv .= chr(mt_rand() & 0xff); } return $iv;}function md5_encrypt($plain_text, $password, $iv_len = 16){ $plain_text .= "\x13"; $n = strlen($plain_text); if ($n % 16) $plain_text .= str_repeat("\0", 16 - ($n % 16)); $i = 0; $enc_text = get_rnd_iv($iv_len); $iv = substr($password ^ $enc_text, 0, 512); while ($i < $n) { $block = substr($plain_text, $i, 16) ^ pack('H*', md5($iv)); $enc_text .= $block; $iv = substr($block . $iv, 0, 512) ^ $password; $i += 16; } return base64_encode($enc_text);}function md5_decrypt($enc_text, $password, $iv_len = 16){ $enc_text = base64_decode($enc_text); $n = strlen($enc_text); $i = $iv_len; $plain_text = ''; $iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512); while ($i < $n) { $block = substr($enc_text, $i, 16); $plain_text .= $block ^ pack('H*', md5($iv)); $iv = substr($block . $iv, 0, 512) ^ $password; $i += 16; } return preg_replace('/\\x13\\x00*$/', '', $plain_text);}/******************************************/$plain_text = 'teste';$enc_text = md5_encrypt($plain_text, $password);echo "Texto Criptografado: [${enc_text}]<br />\n";$plain_text2 = md5_decrypt($enc_text, $password);echo "Texto Descriptografado: [${plain_text2}]<br />\n"; Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Fevereiro 13, 2006 Bem, para fazer isto, seria melhor usar a biblioteca mcrypt. http://www.php.net/mcrypt Compartilhar este post Link para o post Compartilhar em outros sites
Illidan 0 Denunciar post Postado Fevereiro 13, 2006 Consegui criptografar e descriptografar. Na realidade, isso não é md5... deram o nome de "md5_encrypt/decrypt" pra essas funções, mas o algorítimo delas nem de perto se assemelha ao do verdadeiro md5. Pode comparar os resultados: $str = "senha"; echo md5($senha) . "<br />" . md5_encrypt($senha); Demaso, se o cara invadir o banco de dados e pegar os 32 caracteres que correspondem à senha, ele só vai conseguir "descriptografar" por força bruta*. Isto se a senha do usuário for fraca (ou seja, se tiver poucos caracteres e se forem exclusivamente alfanuméricos) e se a pessoa que desenvolveu o sistema não pensou em nada no caso dos usuários utilizarem senhas fracas. Se não, mesmo que o cara pegue o hash md5, ele vai ficar eternamente tentando decodificar por força bruta. Por exemplo, quem garante que os 32 caracteres são de um hash md5? Podem ser os 32 primeiros (ou últimos) caracteres de um hash sha1, que tem 40 caracteres quando é gerado. Ou ainda, podem ser o hash md5 de um sha1. Assim: $hash = md5(sha1("senha")); São muitas as possibilidades que você tem pra aumentar a segurança, mesmo que seu banco de dados seja invadido... []'s! * Decodificação por força bruta é aquela em que se vai testando todas as combinações possíveis até se achar uma que bata com o valor original. Mesmo com os computadores mais avançados, poderia levar anos até conseguir decodificar um hash por força bruta. Compartilhar este post Link para o post Compartilhar em outros sites
WordScript 0 Denunciar post Postado Janeiro 26, 2010 Sei que antigo este tópico, mas esse mesmo código esta no livro Segurança em PHP e esta aprovado, ate hoje nunca me deu problema. Consegui criptografar e descriptografar. Essas são as funções function get_rnd_iv($iv_len) { $iv = ''; while ($iv_len-- > 0) { $iv .= chr(mt_rand() & 0xff); } return $iv; } function md5_encrypt($plain_text, $password, $iv_len = 16) { $plain_text .= "\x13"; $n = strlen($plain_text); if ($n % 16) $plain_text .= str_repeat("\0", 16 - ($n % 16)); $i = 0; $enc_text = get_rnd_iv($iv_len); $iv = substr($password ^ $enc_text, 0, 512); while ($i < $n) { $block = substr($plain_text, $i, 16) ^ pack('H*', md5($iv)); $enc_text .= $block; $iv = substr($block . $iv, 0, 512) ^ $password; $i += 16; } return base64_encode($enc_text); } function md5_decrypt($enc_text, $password, $iv_len = 16) { $enc_text = base64_decode($enc_text); $n = strlen($enc_text); $i = $iv_len; $plain_text = ''; $iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512); while ($i < $n) { $block = substr($enc_text, $i, 16); $plain_text .= $block ^ pack('H*', md5($iv)); $iv = substr($block . $iv, 0, 512) ^ $password; $i += 16; } return preg_replace('/\\x13\\x00*$/', '', $plain_text); } /******************************************/ $plain_text = 'teste'; $enc_text = md5_encrypt($plain_text, $password); echo "Texto Criptografado: [${enc_text}]<br />\n"; $plain_text2 = md5_decrypt($enc_text, $password); echo "Texto Descriptografado: [${plain_text2}]<br />\n"; Compartilhar este post Link para o post Compartilhar em outros sites