All posts in C#

Salve, salve galera,

Atualmente temos visto que muitos órgãos do governo e outras entidades tem adotado o envio de documentos digitais, tais como NF-e, CT-e, SPED, etc, visando uma maior eficiência na apuração e identificação de fraudes. Existe um assunto que é comum em todos esses tramites de dados, o arquivo enviado geralmente (não sempre) é um arquivo XML, e na maioria das vezes é um documento assinado digitalmente com o certificado digital do emissor.

Nesse post, vou mostrar de uma maneira bem simplista e prática como assinar o conteúdo de uma TAG XML e adiciona-la ao respectivo arquivo para fazer o envio do mesmo. Vale lembrar pessoal que a forma que vou mostrar aqui utiliza o certificado A1, e é aceito pelos serviços relacionados a NF-e, se existem variantes desse ou se outros órgãos tem outras restrições é uma questão de analise de caso-a-caso.

Bom mais vamos deixar de bla-bla-bla e vamos por a mão na massa.

Read more


Salve, salve galera,

Muita gente já precisou em algum momento gerar um classe que representasse um schema XML para poder utiliza-la como Model em alguma aplicação. Hoje em dia com a crescente demanda por emissão de documentos fiscais eletrônicos  (NFe, CTe, MDFe) a implementação nos sistemas legados tem se tornado alta.

Porem temos um problema muito grande, o schema XML da NFe por exemplo , tem muitas tags, e tipos complexos, o que demanda muito tempo de escrita de codigo, para minimizar (nao eliminar :D) esse problema, temos um recurso muito interessante no Visual Studio que nos permite criar uma classe apartir de um schema XML. Vamos ver ???

Primeiramente precisamos de um schema XML para trabalhar, nesse caso vou utilizar o schema atual da NFe.

Schema1

Tendo escolhido nosso schema, precisaremos abrir o Prompt de Comando do Visual Studio e nos dirigirmos ate a pasta onde se encontram esses schemas, no meu caso, esta nesse caminho

C:ProgramDataMicrosoftWindowsStart MenuProgramsMicrosoft Visual Studio 2012Visual Studio Tools

Schema2

Agora, para criarmos nossa classe basta utilizarmos o seguinte comando:


xsd.exe xmldsig-core-schema_v1.01.xsd nfe_v2.00.xsd /c

Teremos o seguinte resultado.

Schema3

Agora basta adicionarmos a classe gerada (que fica a principio com o mesmo nome do schema utilizado) e utiliza-la.

Segue um printzinho para termos uma ideia.

Schema4

 

Pessoal de uma maneira bem simples , temos uma classe Model do nosso schema, lembrando que, poderemos ter diferenças de funcionamento a cada conteúdo de schema (tipos complexos, e tudo mais). Mas isso já ajuda bastante.

Por hoje paro por aqui, espero ter ajudado.

 


Salve, salve galera…

Todos nós quando estamos desenvolvendo rotinas que trabalham com números imputados temos que nos atentar nas conversões e garantir que não haverá problemas.

Para isso temos a opção de realizar a conversão utilizando o método TryParse, porém, se a cada recuperação de dados fizermos isso nosso código ficara bem extenso. Então hoje vou demonstrar um recurso simples, mas que auxilia muito na nossa vida. Assim como temos o método ToString() que realiza uma conversão “automática” do valor para string, criaremos um método ToInt(), para que possamos de maneira simples recuperar valores imputados, ou realizar conversões com valores tipo INT.

public static int ToInt(this object param)
{
      int saida;
      if (param != null)
      {
           if (int.TryParse(param.ToString(), out saida))
                 return saida;
           else
                 throw new InvalidCastException("Impossível converter para inteiro");
      }
      else
      {
           throw new InvalidCastException("Impossível converter para inteiro");
      }
}

Pronto pessoal, esse é nosso método de extensão para recuperar o Int de um atributo ou variável, ou afins. E para utilizar basta chamarmos da seguinte forma.

int variavel = txtNumero.Text.ToInt()

E ae pessoal ? tudo em cima ????

Nesse post vou mostrar uma ( das varias ) maneiras de criar um repositório de usuários no ASP.NET MVC. Esse recurso pode ser utilizado por exemplo, em conjunto com o recurso de BaseController para controlar o acesso de usuários. Nesse caso iremos trabalhar com Cookies

Bom vamos la, mãos na massa….


namespace Portal.Seguranca
{
    public class UsersRepository
    {
         public static Models.Usuario.Usuario usuarioLogado
         {
              get
              {
                    var usr = HttpContext.Current.Request.Cookies["UserCookieAuthentication"];
                    if (usr == null)
                    {
                          return null;
                    }
                    else
                    {
                          string NovoToken = CryptographyRepository.Descriptografar(usr.ToString());
                          int IDUsuario;

                          if (int.TryParse(NovoToken, out IDUsuario))
                          {
                                return Usuario.getById(IDUsuario);
                          }
                          else
                          {
                                return null;
                          }
                     }
              }
        }

        public static bool deslogar()
        {
               try
               {
                       HttpCookie http = new HttpCookie("UserCookieAuthentication");
                       http.Expires = DateTime.Now.AddDays(-1);
                       HttpContext.Current.Response.Cookies.Add(http);

                       return true;
               }
               catch(Exception ex)
               {
                      throw ex;
               }
        }

        public static bool registrarUsuario(Models.Seguranca.Usuario usr)
        {
              try
              {
                    if (usr == null)
                    {
                        return false;
                    }
                    else
                    {
                        //Criando um objeto cookie
                        HttpCookie UserCookie = new HttpCookie("UserCookieAuthentication");

                        //Setando o ID do usuário no cookie
                        UserCookie.Value = CryptographyRepository.Criptografar(usr.Codigo.ToString());

                        //Definindo o prazo de vida do cookie
                        UserCookie.Expires = DateTime.Now.AddHours(2);

                        //Adicionando o cookie no contexto da aplicação
                        HttpContext.Current.Response.Cookies.Add(UserCookie);

                        return true;
                    }
            }
            catch (Exception ex)
            {
                 throw ex;
            }
       }
    }
}

Desse ponto endiante, pode simplesmente, fazer a chamada da seguinte forma.


Models.Usuario.Usuario usr = UsersRepository.usuarioLogado;

Lembrando que os Coockies de preferencia devem estar criptografados para segurança.

Ate a próxima pessoal.


Utilizando o algoritmo de hash MD5 com C#

Categories: C#
Comments: No

Pessoal neste post estarei mostrando como utilizar o algoritmo de hash MD5 através de uma string, recurso esse muito util para criptgrafia de valores. Vamos lá ?

O algoritmo MD5 é muito usado para armazenamento de senhas ou valores na qual queremos um certo cigilo.

Nesse exemplo converteremos uma string em um hash de 32 bits hexadecimal.


public string converterValor(string input)
 {

//Instancia a variavel que sera responsavel pela criação
 MD5 md5 = System.Security.Cryptography.MD5.Create();

//obtem os bytes correspondentes do valor de entrada e atribui a uma variavel vetor.
 byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);

//cria o hash atraves do valor de bytes obtidos
 byte[] hash = md5.ComputeHash(inputBytes);

//ordena os valores em uma string e retorna
 StringBuilder sb = new StringBuilder();
 for (int i = 0; i < hash.Length; i++) {
 sb.Append(hash[i].ToString("X2"));
 }
 return sb.ToString();
 }

Simples não é ?

Até a próxima pessoal.