Como criar um gerador de machinekey

Boa Tarde pessoal!

Nesse artigo veremos como desenvolver uma ferramenta para geração de machinekey’s, com essa ferramenta podemos gerar chaves que, por exemplo, podem ser utilizadas pelo Membership para criptografia de senhas.

Vamos iniciar o desenvolvimento criando um novo projeto do tipo Windows Application, para isso acesse o menu File > New > Project, depois dentro da opção “Windows” selecione o item “Windows Forms Application” será criada um novo projeto como mostra na imagem abaixo.



Agora vamos adicionar alguns componentes que iremos utilizar, adicione um Button e altere o ID para btnGerarChave, um Textbox e altere o ID para txtChave e três RadioButtons com os respectivos ID’s rb128, rb256, rb512, podemos ver o resultado na imagem abaixo.



Após ter adicionado os componentes começaremos a codificar nosso gerador de “machineKey”, vá para o Code Behind (F7) nele vamos escrever o seguinte código;

Código 1
//Contante com o template da chave machinekey
private const string constTag = "<machineKey validationKey=\"{0}\" decryptionKey=\"{1}\" validation=\"SHA1\" decryption=\"AES\" />";

Código 2
private void button1_Click(object sender, EventArgs e)
{
    //Limpando o textbox
    txtMachineKey.Clear();

    //Inicializando o tamnho de bytes da nossa chave
    int byteLen = 128;

    if (rb256.Checked)
        byteLen = 256;

    if (rb512.Checked)
        byteLen = 512;

    //Altera os paramentros da constante string "constTag" com os valors do método "getRadomKey"
    string tag = string.Format(constTag, getRadomKey(byteLen), getRadomKey(byteLen / 2));

    //Popula o TextBox com a chave gerada
    txtMachineKey.Text = tag;

}

Código 3
private string getRadomKey(int byteLength)
{
    //Inicializa o arrey de bytes
    byte[] buff = new byte[byteLength / 2];

    //Intancia a classa para a criptografia
    //Necessário utilzação da using System.Security.Cryptography;
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
            
    //Preenche o arrey de bytes com a criptografia utilizada
    rng.GetBytes(buff);

    //Intancia uma StringBuilder 
    //(String de construção, é concelhável a utilização quando necessitamos contatenar uma grande contidade
    // de strings
    StringBuilder sb = new StringBuilder(byteLength);

    //Converte o array par o formato de string
    for (int i = 0; i < buff.Length; i++)
        sb.Append(string.Format("{0:X2}", buff[i]));

    //resutado final do processo de criação de uma chave de criptografia randômica
    return sb.ToString();
}

Após ter criado todos os métodos e códigos o resultado do será esse:
<machineKey 
  validationKey="D92064F6030F99FB57211D2158069D85C3714CBF4D7C1E7DFF523AEB35417832FC5A4167AB52AC2AB2C944F34897627D476C6BF8E8AEC61BF53565ED5D122A1B" 
  decryptionKey="381B0613A7E3073A8B2103C5C3E31A6E5E5EFE5CFF56755CE61A311094A6A6DC" 
  validation="SHA1" 
  decryption="AES" />

Abraços
T+

Tag: Membership, Asp.net, machinekey, c#, csharptoolbox

Comentários

Postagens mais visitadas deste blog

[DICA] SQL Server - Desabilitar / Habilitar chaves estrangeiras (Foreign Key - FK)

Introdução ao desenvolvimento .NET / C# - Aula 2