Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Editado [Código corrigido]
<?
function codificaSenha($senha, $usuario){
$senhaNew = $senha.$usuario;
/* Gera um Salt Aleatório */
$salt = getSaltAleatorio();
/* Cria a Hash primária */
$hash = md5($senhaNew . $salt);
/* Encripta essa Hash 1000 vezes */
for ($i = 0; $i < 1000; $i++)
$hash = md5($hash);
return array($hash, $salt);
}
/**
* getSaltAleatorio
*
* Gera um Salt aleatório para ser utilizada na composição da senha
*
* @param int $tamanho Tamanho do Salt
* @return string Salt formatado
*
*
**/
function getSaltAleatorio($tamanho = 22) {
return substr(sha1(mt_rand()), 0, $tamanho);
}
/* Códifica senha */
$senhaCodificada = codificaSenha("admin2323", "admin");
var_dump($senhaCodificada);
$userSalt = $senhaCodificada[1];
/* Agora Valida */
$userDigitado = "admin";
$senhaDigitado = "admin2323";
$senhaVerifica = $senhaDigitado.$userDigitado;
$senhaDoUsuario = md5($senhaVerifica.$userSalt);
for($i = 0; $i < 1000; $i++){
$senhaDoUsuario = md5($senhaDoUsuario);
}
echo "Senha Digitada pelo usuário: <br />";
var_dump($senhaDoUsuario);
?>Na verdade o algoritimo está correto. Ao tentar validar novamente tava colocando o usuário no lugar da senha.
>
De fato há algum problema no seu algoritmo, mas não consegui encontrar. Fiz uma pequena alteração na sua função para criptografar e retornar a mesma criptografia, caso o $salt seja informado. Nos meus teste o resultudado foi bem sucedido.
<?php
function getSenha($senha, $usuario, $salt = false){
$senha = $senha.$usuario;
/ Gera um Salt Aleatório /
if (!$salt)
$salt = getSaltAleatorio();
/ Cria a Hash primária /
$hash = md5($senha . $salt);
/ Encripta essa Hash 1000 vezes /
for ($i = 0; $i < 1000; $i++)
$hash = md5($hash);
return array('senha'=>$hash, 'salt'=>$salt);
}
/**
* getSaltAleatorio
*
* Gera um Salt aleatório para ser utilizada na composição da senha
*
* @param int $tamanho Tamanho do Salt
* @return string Salt formatado
*
* @author Fernando Tholl
* @copyright ---
* @package ---
*
**/
function getSaltAleatorio($tamanho = 22) {
return substr(sha1(mt_rand()), 0, $tamanho);
}
$userDigitado = "admin";
$senhaDigitado = "admin2323";
/ Códifica senha /
$senhaCodificada = getSenha($userDigitado, $senhaDigitado);
var_dump($senhaCodificada);
$userSalt = $senhaCodificada['salt'];
/ Agora Valida /
$senhaDoUsuario = getSenha($userDigitado, $senhaDigitado, $userSalt);
var_dump($senhaDoUsuario);
?>>
Na verdade o algoritimo está correto. Ao tentar validar novamente tava colocando o usuário no lugar da senha.
Acontece. :)
Rs
Agora que você disse, também vi o problema.
Boa sorte.
Obrigado amigo.
Esse foi difícil de achar :) haushausa, fiquei desde as 8 horas para descobrir que o script de teste que eu fiz é que estava errado. aushaushausha
De fato há algum problema no seu algoritmo, mas não consegui encontrar. Fiz uma pequena alteração na sua função para criptografar e retornar a mesma criptografia, caso o $salt seja informado. Nos meus teste o resultudado foi bem sucedido.
/ Gera um Salt Aleatório /
/ Cria a Hash primária /
$hash = md5($senha . $salt);
/ Encripta essa Hash 1000 vezes /
/**
* getSaltAleatorio
*
* Gera um Salt aleatório para ser utilizada na composição da senha
*
* @param int $tamanho Tamanho do Salt
* @return string Salt formatado
*
* @author Fernando Tholl
* @copyright ---
* @package ---
*
**/
/ Códifica senha /
/ Agora Valida /