Criptografia

4 respostas
android
F

Bom dia pessoal.

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?

Se podarem também postar um exemplo eu agradeço

4 Respostas

T

Estou supondo que é um processo de autenticação simples.

Na sua aplicação php (webservice), antes de gravar no banco de dados.

A função password_hash do php usa o bcrypt por padrão, que é bastante recomendado. A documentação lista outras opções.

$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

É melhor criptografar na aplicação php do que na própria aplicação Android? Porque?

T

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

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.

Criado 11 de setembro de 2020
Ultima resposta 12 de set. de 2020
Respostas 4
Participantes 2