Estou utilizando um webservice (php+mysql ) para autenticar o usuário no meu aplicativo, porém os dados do usuário ficam expostos no banco de dados.
Minha pergunta: Devo criptografar a senha do usuário no meu aplicativo ou no banco? Qual tipo de criptografia vocês recomendam utilizar (MD5, sha512, sha256, AES) ou outras?
$senhaDigitada = 'senha_Que_Veio_Da_Requisicao_HTTPS';
$hashDaSenha = password_hash($senhaDigitada, PASSWORD_BCRYPT);
// armazene $hashDaSenha no banco de dados
Há mais exemplos da documentação, e você pode procurar por php password_hash exemplo no Google para mais.Não esqueça de criar uma coluna com espaço suficiente no banco (ex: varchar(255)).
Abraço.
F
fabiozika
É melhor criptografar na aplicação php do que na própria aplicação Android? Porque?
T
TerraSkilll
Vai simplificar sua vida, pois a geração de hash das senhas e comparação ocorrerá em um único lugar (webservice). Isso facilita, por exemplo, caso você queira adicionar um novo cliente além do aplicativo android (ex: uma página web ou um aplicativo para iOS). Com a autenticação em um único lugar, você não precisa reimplementar a geração do hash em ambientes diferentes, só a interface pro usuário digitar login e senha.
Além disso, é mais seguro seguro: se sua aplicação for comprometida (hackeada), o método de geração do hash da senha e autenticação não será divulgado, o que comprometeria todos os usuários e possivelmente acabaria com a sua aplicação.
Desconheço cenários onde isso seja feito no cliente (aplicativo). O mais comum, até onde sei, é fazer isso no servidor.
Abraço.
F
fabiozika
Boa noite!
Estou precisando de mais uma ajuda rs.
Adicionei a senha no meu banco da seguinte forma:
$senhaDigitada='teste';$hashDaSenha=password_hash($senhaDigitada,PASSWORD_BCRYPT);$sql="INSERT INTO contas (senha) VALUES ('$hashDaSenha')";$conn->query($sql);
Pelo que entendi para verificar a senha tenho que utilizar o password_verify.
Tentei da seguinte forma:
$login="'".$_POST['login']."'";//Recebe login do app$senha="'".$_POST['senha']."'";//Recebe senha do app$sql="SELECT * FROM contas WHERE login = $login";$result=$conn->query($sql);$registro=mysqli_fetch_array($result);if(password_verify($senha,$registro['senha'])){echo'Verdadeiro';}else{echo'Falso';}
Só que ele sempre retornar o valor falso.
Não sei se é a melhor formar ou correta de se fazer.