.NET: Medir força de senhas – C#

Password Strength.gif

Visualizando em tempo real a força da senha

Salve internautas! Tudo tranquilo?!

Então, depois de quase um ano após a última postagem, eis que eu retorno da cinzas, e mais zika dos códigos ainda haha! Aproveitando que entrei de férias (permanentes) agora posso me dedicar a uma coisa que gosto muito: Programação!

E nada melhor que elaborar uma postagem didática e útil, pois eu amo compartilhar conhecimento!

Chega de papo, and let’s go!

Já precisou alguma vez medir a força de uma senha? Bom, eu nunca, mas como precisava de um passatempo, resolvi estudar uma maneira de como fazer isso.


E não é muito complexo. Primeiramente, citarei as minhas fontes, nas quais me embasei para criar o meu código:

Password Strength Control – CodeProject

Password Strength Checker

Achei o código muito interessante. Ele analisa vários pontos de uma senha. A exemplo, se ela contém caracteres maiúsculos e minúsculos, números, símbolos e etc. Cada coisa conta a favor na força de uma senha, e esse algoritmo contabiliza tudo isso gerando um número percentual de força, onde 0 é uma senha fraquíssima e 100 uma senha fortíssima.

No entanto, o código era meio confuso, e funcionava apenas para Win Forms. Então eu reescrevi o código e criei uma classe chamada AsyncPasswordMetter que, a propósito, é multi plataforma (Funciona em WPF, Win Forms, Xamarin, Whatever) e assíncrona! Isso mesmo, ela funciona de maneira assíncrona, já que o algoritmo é um pouco longo, cerca de 200 linhas, e tem alguns laços, pode ser que em dispositivos com capacidade de processamento limitada haja alguns engasgos pequenos na interface. Sendo assim, assincronamente, roda macio.

Juntamente com a classe, eu criei um pequeno exemplo em WPF. Como a classe foi escrita de forma planejada, ela funciona em conjunto com o poderoso Data Binding e XAML, não sendo necessário escrever, sequer, uma única linha de código para implementá-la no seu aplicativo (Que utilize XAML como linguagem para desenvolver a UI). Gostou, então segue abaixo todo o código(XAML) do aplicativo de exemplo:

<Window x:Class="Password_Strength.MainWindow"         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"         xmlns:local="clr-namespace:Password_Strength"         mc:Ignorable="d"         Title="Password Strength" Height="84.537" Width="389.108"><span 				data-mce-type="bookmark" 				id="mce_SELREST_end" 				data-mce-style="overflow:hidden;line-height:0" 				style="overflow:hidden;line-height:0" 			></span>
    <Window.Resources>
        <local:PasswordStrengthToColorBrushConverter x:Key="PasswordStrengthToColorBrushConverter"                                                      EmptyColorBrush="White" GoodColorBrush="#FFA9E400"                                                      StrongColorBrush="#FF00C87D"                                                      VeryStrongColorBrush="#FF0087E7"                                                      VeryWeakColorBrush="#FFD93D3D"                                                      WeakColorBrush="#FFFFD434"/>
    </Window.Resources>
    <Grid>
        <TextBox HorizontalAlignment="Left" Margin="10,17,0,0" VerticalAlignment="Top" Height="24" Width="156" Text="{Binding Password, BindsDirectlyToSource=True, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}">
            <TextBox.DataContext>
                <local:AsyncPasswordMetter x:Name="PasswordMetter"/>
            </TextBox.DataContext>
        </TextBox>
        <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="24" Margin="240,17,0,0" VerticalAlignment="Top" Width="132" Background="{Binding Strength, Converter={StaticResource PasswordStrengthToColorBrushConverter}, ElementName=PasswordMetter, Mode=OneWay}">
            <TextBlock TextWrapping="Wrap" Text="{Binding StrengthText, ElementName=PasswordMetter, Mode=OneWay}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
        </Border>
    </Grid>
</Window>

Como o código da código da classe AsyncPasswordMetter ficou um pouquinho grande, irei anexar abaixo um link para você baixar o código fonte dela e do exemplo completo:

Password Strength.zip

Espero que possa ser útil para você que leu este post! Um grande abraço!

PS.: Não esquece, se você desenvolve para Windows Forms, ou Xamarin, pode usar a classe AyncPasswordMetter tranquilamente. Ela é multi plataforma. Eu desenvolvi o demo em WPF por preferência pessoal, mas poderia ter sido em Win Forms ou qualquer outra coisa. 😉

Anúncios

1 comentário

  1. Saudaçoes.

    O tema é muito interessante nos dias de hoje, eu estou a escrever de Moçambique.
    na verdade estou a desenvolver um sistema na qual gostaria de inserir este conteúdo, no entanto nao tenho nenhuma experiencia com WPF, so com WindForm C#.
    Poderia mostrar-me como seria a implementação da classe assíncrona AsyncPasswordMetter?
    Agradecia

Deixe um comentário :)

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s