Busca online em todo site:
NETITC

Você não está logado, deseja logar na comunidade? clique aqui.




Título do Artigo

Misturando dados


Data Publicação: 17/2/2006 13:50:27
Total de visualizações: 1924

comente
 


Obfuscar dados

 

 

Olá pessoal, a minha intenção é mostrar como é fácil misturar alguns dados com rapidez e segurança. Mostrarei o exemplo sendo aplicado com aplicação windows form, porém pode ser usada da mesma forma em vários outros tipos de aplicações como: web form ou pocketc pc.

 

 

Pré-requisitos:

 

- Visual Studio.NET 2005;

- Conhecimento avançado C#.NET;

- Disposição para aprender e ser pró-ativo.

 

 

Antes de tudo, volto com as minhas frases criptografadas, tente descriptografar e guanhará um prêmio se for um dos primeiros.

 

 

Nf nboef f-nbjl dpn p ujuvmp: Eftdsjquphsbgfj b gsbtd qfsgfjubnfouf.

 

Para o começo, criei um projeto com o nome de WindowsAplication1. Dentro dele criei um form chamado Form2.cs. Por enquanto está bem básico, tente seguir passo a passo.

Na referência 1.1 mostra como foi montado o layout da janela, porém o que quero mostrar é apenas a funcionalidade em si e para que vá servir daqui pra frente.

 

Referência: 1.1

 

Propriedades do form:

 

Nome do form: Form2

 

Objetos de tela:

TextBox

Id = textBox1

 

TextBox

Id = textBox2

 

Button

Id = button1

Text = Obfuscador

 

Button

Id = button2

Text = DesObfuscar

 

Referência: 1.2

 

 

Com o layout pronto e simples de montar, passo para codificação bruta.

Criei uma classe chamada Obfuscator.cs, que será responsável em codificar e decodificar o valor passado pela classe anterior.

 

 

using System;

using System.Collections.Generic;

using System.Text;

 

namespace Obfuscator.Application

{

    /// <summary>

    /// Contém metodos para obfuscar os valores da registry.

    /// </summary>

    /// <remarks>

    /// </remarks>

    internal static class  Obfuscator

    {

        private const byte keyObfuscator = (byte)15;

 

        /// <summary>

        /// Obfusca valor especificado.

        /// </summary>

        /// <param name="valor">Valor convertido para bytes para ser obfuscado.</param>

        /// <returns>Array de bytes obfuscado.</returns>

        internal static byte[] ObfuscateValue(byte[] valor)

        {

            byte[] retorno = new byte[valor.Length];

 

 

            for (int i = 0; i < valor.Length; i++)

            {

                retorno[i] = (byte)(valor[i] + Obfuscator.keyObfuscator);

            }

 

            return retorno;

        }

 

        /// <summary>

        /// Retorna valor valor limpo para o valor obfuscado especificado.

        /// </summary>

        /// <param name="valor">Valor Obfuscado.</param>

        /// <returns></returns>

        internal static byte[] GetClearObfuscatedValue(byte[] valor)

        {

            byte[] retorno = new byte[valor.Length];

 

            for (int i = 0; i < valor.Length; i++)

            {

                retorno[i] = (byte)(valor[i] - Obfuscator.keyObfuscator);

            }

 

            return retorno;

        }

 

    }

 

}

 

Referência: 1.3

 

 

Explicação:

 

O código em si está todo comentado para entendimento.

Criei uma constante chamada KeyObfuscator com (byte) 15, criei dois métodos onde uso um para misturar valores e outro para tirar a mistura.

 

 

internal static byte[] ObfuscateValue(byte[] valor)

        {

            byte[] retorno = new byte[valor.Length];

 

 

            for (int i = 0; i < valor.Length; i++)

            {

                retorno[i] = (byte)(valor[i] + Obfuscator.keyObfuscator);

            }

 

            return retorno;

        }

 

Referência: 1.4

 

Na analise da assinatura do método, coloquei internal e recebe um valor do tipo byte, ou seja o valor que deve ser mandado é todo tipo byte[]. Logo depois pego a quantidade de caracteres enviados com a linha Length.

Com o próximo passo, faço um for onde pego valor de cada caracter e somo com o valor de minha constante criada no começo da classe. No final retorno os dados. Esse método da referência 1.4 é para misturar os dados passados.

 

internal static byte[] GetClearObfuscatedValue(byte[] valor)

        {

            byte[] retorno = new byte[valor.Length];

 

            for (int i = 0; i < valor.Length; i++)

            {

                retorno[i] = (byte)(valor[i] - Obfuscator.keyObfuscator);

            }

 

            return retorno;

        }

 

Referência: 1.5

 

O método da referência 1.5 é para quebrar o valor obfuscado e transformar em valor normal digitado pelo usuário. Faço à mesma coisa com esse outro método, pego a quantidade de caracteres passados, depois faço um for diminuindo o valor de minha constante. Depois retorno o valor.

 

 

Programando Form2

 

Com os botões e texts do form2 já colocados, sigo o passo de programar e chamar os valores que quero misturar. Cliquei duas vezes em cima button1 e coloquei o código referência 1.6.

 

 

 

private void button1_Click(object sender, EventArgs e)

        {

            string text1 = textBox1.Text.ToUpper();

            byte[] bytesValores = this.encoder.GetBytes(text1);

 

            byte[] aux = Obfuscator.Application.Obfuscator.ObfuscateValue(bytesValores);

            resultado = encoder.GetString(aux) ;

            textBox2.Text = resultado;

        }

 

Referência: 1.6

 

Explicação:

 

Transformei o valor do TextBox1 para caixa alta atribuindo a uma string text1. Criei uma variável bytesValores[] atribuindo o valor text1 transformando para pegar o resultado em Bytes com o código this.encorder.GetBytes(text1).

Criei uma variável com o nome aux, cujo não é aconselhável, pegando o valor retornado do método ObfuscateValue passando o valor bytesValores; ou seja; chamo o método criado anteriormente passando o valor transformado em byte. Com o resultado do mesmo, utilizo o enconder para pegar o GetString passando o valor aux retornado do método misturador. Até o momento não falei nada do encorder, falarei mais a frente.

 

Seguindo para a programação do button2, dei um duplo clique e digitei a linha de código referência 1.7.

 

 

private void button2_Click(object sender, EventArgs e)

        {

            byte[] bytesValores = this.encoder.GetBytes(resultado);

 

            byte[] obj = Obfuscator.Application.Obfuscator.GetClearObfuscatedValue(bytesValores);

            textBox1.Text = encoder.GetString(obj);

        }

 

Referência: 1.7

 

Explicação:

 

Peguei o valor de minha variável resultado armazenada anteriormente pegando o GetBytes, depois criei uma outra variável com o nome obj do tipo byte[] atribuindo o retorno do método GetClearObsfuscatedValeu, cujo foi feito anteriormente. Atribui o valor do obj ao meu Text1 pegando o meu GetString(obj). Simples, fácil e rápido.

 

A referência 1.8 mostra o código o form2.cs todo construído. Inclusive o enconder comentado anteriormente está declarado no início do código.

 

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

namespace WindowsApplication1

{

    public partial class Form2 : Form

    {

        public Form2()

        {

            InitializeComponent();

        }

        private Encoding encoder = new System.Text.UTF8Encoding();

        string resultado = string.Empty;

 

        private void button1_Click(object sender, EventArgs e)

        {

            string text1 = textBox1.Text.ToUpper();

            byte[] bytesValores = this.encoder.GetBytes(text1);

 

            byte[] aux = Obfuscator.Application.Obfuscator.ObfuscateValue(bytesValores);

            resultado = encoder.GetString(aux) ;

            textBox2.Text = resultado;

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            byte[] bytesValores = this.encoder.GetBytes(resultado);

 

            byte[] obj = Obfuscator.Application.Obfuscator.GetClearObfuscatedValue(bytesValores);

            textBox1.Text = encoder.GetString(obj);

        }

    }

}

 

Referência: 1.8

 

 

Testando aplicação:

 

Depois de compilar a aplicação, cliquei F5 e digitei mauricio@ascompras.com e cliquei no botão OBFUSCADOR. (Referência 1.9)

 

Referência: 1.9

 

Depois apaguei o valor do text1, (mauricio@ascompras.com) e cliquei no botão DesObfuscar, o mesmo pegará o valor do text2 e transformar os dados mostrando no text1. (Referência 1.10 e 1.11).

 

Referência: 1.10

 

Referência: 1.11

 

 

 

 

Fico por aqui e espero ter ajudado.

 

Mauricio Junior

mauricio@ascompras.com

Community: www.aspneti.com

Site: www.ascompras.com

 

 



Total de visualizações: 1924
voltar   comente  subir

Autor:


Por:Mauricio Junior
Maurício Júnior
Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 27 anos e possuo sete livros publicados pela editora Ciência Moderna no ano de 2009. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog:  blog.mauriciojunior.orgSite pessoal  www.mauriciojunior.org


Comentários:


Comente (dê sua opinião): VOCÊ PRECISA ESTAR LOGADO

Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Insistência com Vírus por E-mail
Criptografando Senha
Importação e Comunicação entre Sistemas
Ext JS
SQL Server 2005 SP2 já está disponível :)
Convite de Lançamento do Windows 7
Criptografia de String de Conexão no Web.Config
iGas - Sistema de Controle de Combustível
Criando menu dinâmico com C#.NET (Passo 2) - Com diferenciação de usuário
Copiando Script
Chamando Programas de Dentro do Windows Forms
Microsoft Research Laptop Multi-Touch
Tata Motors (Grupo TCS)
Sistema de Catalogar Livros
Framework SkyMenu
Search do Windows Live em Seu Site
Google Chrome no Windows
Detectando erro a todo custo
Ler RSS usando o Visual Studio.NET 2005
Armazenando dados no ViewState – Parte I
Ativando debug do VS no Vista
Criando, utilizando e agendando sistema de backup
Lançamento do livro Desenvolvendo Sistema para Celular
Visual SourceSafe - Série 4
Vídeo - Themes/Skin/Stylo
Criando Alias no Pacote
Vídeo-Aula: Criando um Sistema para Celular com Banco de Dados
Desenvolvendo para iPhone com ASP.NET
ModalDialogExtender
Promoção Assinatura Grátis DevMedia e ASPNETi.COM
Promoção de Certificação Second Shot
Calcular Média de Combustível
Zune
IsAlphaNumeric
Backup, qual a importância dele na sua vida?

Publicidade:

[sumir] [aparecer]
NETITC




Informações Online:

Usuários Online: 987
Artigos:  650
Vídeos:  47
PodCast's:  31
Fórum:  3098
Empregos:  1223
Usuários Cadastrados: 5780

Categoria de Artigos

Vídeos

Enquete - Dê sua opinião

 Os podcasts tem sido proveitoso pra você?

 

Colaboradores

Foto Autor autor: Mauricio Junior   
publicou 378 artigo(s).
Foto Autor autor: Júlio Battisti   
publicou 51 artigo(s).
Foto Autor autor: Fabio Galante Mans   
publicou 28 artigo(s).
Foto Autor autor: Kleber Becerra   
publicou 10 artigo(s).
Foto Autor autor: Ramon Durães   
publicou 6 artigo(s).
Foto Autor autor: Ebenézer de Souza   
publicou 5 artigo(s).
Foto Autor autor: Fabio Aguiar   
publicou 4 artigo(s).
NETITC