🔥 Apps, books, system as a service, podcast and more



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.


                Qualquer dúvida pode entrar em contato pelo site www.mauriciojunior.org

Sign up to our newsletter

Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.

Top