Código hash MD5
O código hash MD5 é um algoritmo de resumo de mensagem, que transforma dados de qualquer tamanho em uma sequência de 128 bits de comprimento fixo (ou 32 caracteres), e é geralmente utilizado para verificar a integridade e a veracidade dos arquivos.
Este código deve ser gerado e informado em cada chamada ao Web Service. Por isso, explicaremos sobre como gerar o hash MD5 utilizando diferentes métdos e linguagens, e como validar o código gerado através do InvoiCy.
É possível gerar o hash MD5 utilizando a chave de acesso gerada pelo InvoiCy no momento do cadastro da empresa, concatenado com todo o conteúdo contido dentro do grupo de tag Envio. Esta chave de acesso pode ser obtida acessando a tela "Dados da Empresa" no grupo Empresa, dentro do "Painel de Controle".
Em seguida, copie a chave de acesso + XML da requisição, conforme o exemplo abaixo:
Ex: 9099628c5a2e63d56a6c058c34e2b46f<Envio><ModeloDocumento>NFe(….)</Envio>
No momento da geração do código, as informações do documento fiscal que constam dentro da tag <inv:Documento> ainda não podem estar convertidas para texto. E caso seja enviado mais de um documento, o código deve ser gerado somente com as informações do primeiro documento informado.
Ressaltando que, o código hash MD5 gerado deve ser informado no campo EmpCK do Web Service.
Geração de CK
Na linguagem C#, a manipulação de algoritmos de criptografia como o MD5 é facilitada pela existência de classes e funções projetadas para simplificar a implementação e o gerenciamento desses processos de segurança, como pode ser conferido aqui.
Enquanto que na linguagem Java, a geração da criptografia utilizando o algoritmo MD5 pode ser realizada de diversas maneiras, empregando diferentes classes e abordagens. O MD5 (Message-Digest Algorithm 5) é uma função de hash criptográfica amplamente utilizada para gerar um resumo de 128 bits a partir de qualquer entrada de dados, sendo ideal para verificar a integridade de arquivos.
A geração do código hash MD5 em C# ou Java, pode ser realizada conforme evidenciado abaixo:
namespace Exemplo
{
class ExemploMd5
{
// Função que gera um hash MD5 de uma string
public string md5(string entrada)
{
// Entrada = "chave_de_acesso" + "<Envio>…</Envio>";
using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
{
byte[] dados = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(entrada));
System.Text.StringBuilder construtor = new System.Text.StringBuilder();
for (int i = 0; i < dados.Length; i++)
{
construtor.Append(dados[i].ToString("x2"));
}
return construtor.ToString();
}
}
}
}
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
public class Exemplo {
public String md5(String entrada) {
String md5 = "";
try {
MessageDigest algoritmo = MessageDigest.getInstance("MD5");
byte[] digest = algoritmo.digest(entrada.getBytes(StandardCharsets.UTF_8));
BigInteger hash = new BigInteger(1, digest);
md5 = hash.toString(16);
while (md5.length() < 32) {
md5 = "0" + md5;
}
} catch (Exception e) {
e.printStackTrace();
}
return md5;
}
}
Com a geração do hash MD5, é possível validar o código gerado pelo seu sistema comparando-o com o código esperado pelo InvoiCy, através de uma calculadora MD5 que gera o código Hash chamado no Web Service. Para utilizar este recurso, acesse a tela "Ferramentas de Integração" no grupo Empresa, dentro do Painel de Controle, conforme destacado abaixo:
Nesta tela, a chave de acesso e a chave de parceiro serão apresentadas, conforme a empresa selecionada. Para a geração do hash MD5, é necessário colar o XML linearizado, gerado pelo seu sistema, na opção "Conteúdo do XML".
Posteriormente, é necessário clicar em "Gerar EmpCk" e aguardar a geração do hash MD5 na opção "EmpCK Esperada". Este Hash deverá ser comparado com o código gerado pelo seu sistema. Caso o resultado exibido nesta opção seja diferente do que foi gerado pelo seu sistema, recomenda-se revisar o XML, removendo caracteres especiais, espaços e quebras de linha.

