Senha forte usando C#
Olá
pessoal, hoje eu vou falar e mostrar como fazer senhas fortes usando a
linguagem C#. Antes de começar a mostrar e explicar o código, é importante
entender porque precisamos de senhas fortes e a atualização periódica.
Como arquiteto
de software e professor de faculdade, os profissionais estão se formando e
entrando no mercado de trabalho sem dar importância no uso de criptografia de
dados, senhas criptografadas e segurança da informação. Isso me preocupa porque
qualquer hacker que tente entrar na aplicação, site ou sistema construído, usando
a forma mais básica de invasão, eles conseguem entrar.
Já
falei em outros artigos a importância de criptografar dados, criptografar banco
de dados e senhas de acesso por exemplo: na string de conexão com o banco de
dados e dados dos usuários. Os dados pessoais não podem estar expostos
facilmente. Os dados pessoais são tão importantes quanto o sistema, na minha
opinião mais importantes do que o sistema em si (opinião pessoal). Nenhum
programador ou analista de sistemas que sai da faculdade importa com a
segurança dos dados e a segurança no momento de programar. Só quer ver o software
funcionando e nada mais.
Além de
criptografar dados, é necessário fazer com que o usuário digite senhas
difícieis, senhas com letras, números, caracteres especiais e mais. Para isso, os
programadores precisam ajudar os usuários que usam o software, ajudar no
sentido de cadastro, travamento de senhas fáceis e tudo mais. O software veio
para facilitar a vida do usuário e não complicar, mas o grande problema são os
hackers ou os programas que os hackers fazem. Eles utilizam métodos para forçar
a senha usando as mais óbvias como 12345 e outras. O software não pode deixar
que isso aconteça, deve travar todo tipo de solicitação fácil de senha.
O que vou mostrar aqui é um passo
a passo usando C# e o primeiro passo é verificar se a senha está entre 6 e 12
caracteres. Lembro que é um exemplo apenas. Listagem 1.
Listagem 1 – Verifica a quantidade de caracteres existentes
na senha digitada.
if (senha.Length < 6 || senha.Length > 12)
A senha
digitada deve ter entre 6 e 12 caracteres, isto é, o mínimo são 6 e o máximo
são 12 caracteres. A variável senha é do tipo string.
O
segundo passo é verificar se existe pelo menos um número digitado, nesse caso,
é importante ter pelo menos um número digitado na senha. Veja a listagem 2.
Listagem 2 – Verifica se existe pelo menos um número na
senha.
if (!senha.Any(c
=> char.IsDigit(c)))
O terceiro passo é
verificar se o usuário digitou pelo menos uma letra maiúscula, no nosso caso,
quanto mais misturar letras, números, maiúsculos e minúsculos melhor. A
listagem 3 mostra se existe letras maiúsculas.
Listagem 3 – Verifica se existe pelo menos uma letra
maiúscula.
if (!senha.Any(c => char.IsUpper(c)))
O quarto
passso é simples como o terceiro, só verifica se existe algum valor com
caracter minúsculo. É necessário ter pelo menos 1 minúsculo. Veja a listagem 4.
Listagem 4 – Verifica se existe pelo menos um caracter
minúsculo.
if (!senha.Any(c
=> char.IsLower(c)))
O quinto passo é
interessante. Hoje existem pessoas que estão colocando caracteres especiais nas
senhas, como #, $, %, espaço e tudo mais. Esses caracteres podem ser
verificados se você quiser, basta verificar a existência de pelo menos um
caracter especial, veja a listagem 5.
Listagem 5 – Verifica se existe algum caracter especial.
if (!senha.Any(c
=> char.IsSymbol(c)))
Existem
sistemas que não permitem caracteres especiais, pra isso você precisa verificar
se o que foi digitado não existe caracter especial. Se existir algum caracter
especial, o sistema indica retorna ao usuário. Esse código é simples também,
veja a listagem 6.
Listagem 6 – Verifica se não existe algum caracter especial.
if (!(senha.All(c
=> char.IsLetter(c) || char.IsDigit(c))))
Note que a listagem 6
verifica se a senha existe além de letra e número, outro caracter. Não
existindo só letra e número, o sistema solicita nova senha ao usuário
explicando que não pode colocar caracter especial. O caracter espaço não é
aceito.
Já desenvolvi
sistemas que por regra não podem repetir mais de duas letras iguais na senha.
Isso faz com que a mesma letra repita apenas duas vezes, se tiver mais do que
duas o sistema pede para o usuário alterar. Nesse caso, é necessário fazer uma
laço e verificar se tem a mesma letra repetida mais de duas vezes. Veja a
listagem 7.
Listagem 7 – Verifica se existe mais que dois caracteres
repetidos.
var contadorRepetido = 0;
var ultimoCaracter = '\0';
foreach(var c in senha)k
{
if (c == ultimoCaracter)
contadorRepetido++;
else
contadorRepetido = 0;
if (contadorRepetido == 2)
return false;
ultimoCaracter = c;
}
Tudo
que foi falado aqui serve para que você, utilizar no seu software, sistema ou
site. Foi verificado todos os caracteres para que a senha do usuário fique
forte e ao mesmo tempo difícil de descobrir por um hacker. É lógico que, com
uma senha difícil pode ser que o usuário esqueça facilmente. É bom criar um
envio de senha por e-mail ou celular, assim fica simples no caso de
esquecimento.
A minha
dica é: coloque todas essas verificações dentro de um método do tipo estático,
com parâmetro de entrada do tipo string e retorno Boolean. A listagem 8 mostra
um exemplo.
Listagem 8 – Método completo
public static
Boolean verificaSenhaForte(string senha){
if (senha.Length < 6 || senha.Length
> 12)
return false;
if (!senha.Any(c =>
char.IsDigit(c)))
return false;
if (!senha.Any(c =>
char.IsUpper(c)))
return false;
if (!senha.Any(c => char.IsLower(c)))
return false;
if (!senha.Any(c => char.IsSymbol(c)))
return false;
var contadorRepetido = 0;
var ultimoCaracter = '\0';
foreach(var c in senha)k
{
if (c == ultimoCaracter)
contadorRepetido++;
else
contadorRepetido = 0;
if (contadorRepetido ==
2)
return false;
ultimoCaracter = c;
}
return true;
}
Espero
que tenha gostado de tudo que foi explicado aqui. Foi um bom aprendizado,
aproveite o que aprendeu e coloque em seu software para assegurar que usuários
usem senhas difícieis para os hackers.
Sign up to our newsletter
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.