![]() |
Neste artigo vou mostrar uma estratégia para solicitar a senha na execução de um programa C#. |
![]() |
Essa abordagem é a mais simples e a mais usada, mas esta estratégia obriga que o programa tenha a senha no seu código e mesmo o mais iniciante dos hackers poderá facilmente quebrar o código e obter a senha.
Pensando nisso este artigo trás uma abordagem um pouco mais segura (não infalível).
Ao
invés de armazenar a senha no código do programa , o programa vai armazenar
um token e sua encriptação usando uma senha.
Ao informar a senha no formulário de acesso o programa vai usar a senha para
criptografar o token e assim comparar o resultado com o valor criptografado
que esta salvo no programa. Se os valores forem iguais então o programa vai
considerar que a senha informada esta correta.
Dessa forma o programa não precisa armazenar a senha e não há como um hacker obter o seu valor.
A seguir vou mostrar um forma bem simples de implementar isso.
Recursos Usados
Criando o projeto Windows Forms
Abra o VS 2017 Community e crie um novo projeto (File-> New Project) usando a linguagem C# e o template Windows Forms App (.NET Framework).
Informe um nome a seu gosto. Eu vou usar o nome WF_SenhaSegura;
No menu Project clique em Add Windows Forms e informe o nome frmAcesso. Nesse formulário inclua os seguintes controles:
Disponha os controles conforme o leiaute da figura abaixo:
![]() |
A seguir selecione o formulário Form1.vb e partir da ToolBox inclua um controle Label com o texto : Bem-Vindo !!!
Neste formulário inclua no evento Load o código abaixo:
Este código faz o seguinte:
1- Define o token de acesso e a senha cifrada que será comparada com o resultado da cifragem da senha que vamos realizar.
2- Cria uma instância de frmAcesso para apresentar o formulário onde o usuário informa a senha
3- Se o usuário clicar em Cancelar então fecha o formulário
4- Obtem a senha informada no formulário
5- Verifica se a senha cifrada usando o token é diferente da senha cifrada, neste caso encerra caso contrário exibe o formulário da aplicação.
O código usa o método Cifrar da classe Seguranca cujo código é o seguinte:
public class Seguranca
{
public static string Cifrar(string senhaInformada, string token, bool usarHashing)
{
byte[] keyArray;
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(senhaInformada);
byte[] resultArray;
//voce pode armazenar o token em um arquivo de configuração
//token = ConfigurationManager.AppSettings.Get("SecurityKey");
if (usarHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(token));
hashmd5.Clear();
}
else
{
keyArray = UTF8Encoding.UTF8.GetBytes(token);
}
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor();
resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
tdes.Clear();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
}
|
Este código cifra a senha usando o token e retorna uma string cifrada que deve ser igual ao conteúdo da variável senhaCifrada se a senha estiver correta.
A implementação da cifragem pode variar a vontade. O código que eu usei foi pego na web o que importa é a ideía.
Executando o projeto e informando a senha correta iremos obter:
Dessa forma a senha não esta sendo armazenada na aplicação.
Pegue
o projeto completo aqui :
WF_SenhaSegura.zip
"Disse-lhe Jesus: Eu sou o caminho, e a verdade e a
vida; ninguém vem ao Pai, senão por mim."
João 14:6
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - Salvando e Lendo informações em um arquivo XML - Macoratti