Ir para conteúdo
  • Cadastre-se

dev botao

Assinatura Digital - Em Base64 / Pkcs#1 - Duvidas.


Walleg
  • Este tópico foi criado há 2037 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Não sei se ajuda alguem porém aqui vai o código em C# que eu utilizo para gerar a assinatura.

private void ReloadCerts()
		{
			var store = new System.Security.Cryptography.X509Certificates.X509Store(StoreName.My, StoreLocation.CurrentUser);
			store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
			this.certs = new List<X509Certificate2>();
			this.cmbCertificado.Properties.Items.Clear();
			var _certs = store.Certificates
				.Find(X509FindType.FindByTimeValid, DateTime.Now, true)
				.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, true);
			foreach (var cert in _certs)
			{
				if (cert.HasPrivateKey)
				{
					this.certs.Add(cert);
					this.cmbCertificado.Properties.Items.Add(cert.GetNameInfo(X509NameType.SimpleName, false));
				}
			}
		}
private void btnGerar_Click(object sender, EventArgs e)
		{
			if (this.cmbCertificado.SelectedIndex >= 0)
			{
				var cert = this.certs[this.cmbCertificado.SelectedIndex];
				//if (cert.Verify())
				{
					var data = Encoding.UTF8.GetBytes(this.txtCNPJSoftwareHouse.Text + this.txtCNPJContribuinte.Text);
					RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PrivateKey; // cert = certificado X509
					var sha = new SHA256Managed();
					var hash = sha.ComputeHash(data);
					var encrypted = csp.SignHash(hash, CryptoConfig.MapNameToOID("SHA256")); 

					this.txtAssinatura.Text = Convert.ToBase64String(encrypted);

				}
			}
		}
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Usando o código do Guilhermesmc, consegui selecionar o certificado A3 e gerar a chave.

porém ela também ficou com 172 bytes, quando fiz com openssl, deu o mesmo resultado 172 bytes!

Bem, acho que é isso...

Utilizando o meu código aqui eu consigo chegar nos 344 bytes que a sefaz pede:

Exemplo gerado pelo código postado acima:

"YOXBBoAVZ/RnlTautWW0DzTgao15SQR8cyZ1cGJrvx6v+Ap6pH5oiOzIoPk3BBfp6KmTHOEyVTE6E80x/VZvMAyeCyvEm57wmFrUMmL7JcDTqbAvQFpEm71licVRsGaa0WVppko6SYHC58TTqqgpDZWU4q1gjkAJOn7VERyIJDlTXJe3uWrlyvH3z2iyd1ooa7gA4N/IVLzEOTk5ByosiNg+T3MUftNioo8McdhGNNSNk/kxZG2d0cCFw71YaiiyR2g1JGFH4bgH7bAC6vD8r4nECkZKVsyN7cHoSwcoAo3dbT6+TvWVToXgze2EU4w3Plq3BMxYmOJN0i31KWXMQw=="

A variavel data fica com 28 bytes.

A variavel hash fica com 32 bytes.

A variavel encrypted fica com 256 bytes.

E o resultado fica com 344 bytes.

Link para o comentário
Compartilhar em outros sites

Utilizando o meu código aqui eu consigo chegar nos 344 bytes que a sefaz pede:

Exemplo gerado pelo código postado acima:

"YOXBBoAVZ/RnlTautWW0DzTgao15SQR8cyZ1cGJrvx6v+Ap6pH5oiOzIoPk3BBfp6KmTHOEyVTE6E80x/VZvMAyeCyvEm57wmFrUMmL7JcDTqbAvQFpEm71licVRsGaa0WVppko6SYHC58TTqqgpDZWU4q1gjkAJOn7VERyIJDlTXJe3uWrlyvH3z2iyd1ooa7gA4N/IVLzEOTk5ByosiNg+T3MUftNioo8McdhGNNSNk/kxZG2d0cCFw71YaiiyR2g1JGFH4bgH7bAC6vD8r4nECkZKVsyN7cHoSwcoAo3dbT6+TvWVToXgze2EU4w3Plq3BMxYmOJN0i31KWXMQw=="

A variavel data fica com 28 bytes.

A variavel hash fica com 32 bytes.

A variavel encrypted fica com 256 bytes.

E o resultado fica com 344 bytes.

 

 

Então realmente vou ter que verificar como se faz isso com o Certificado A3

Acredito que seja o certificado o problema.

 

Link para o comentário
Compartilhar em outros sites

Utilizando o meu código aqui eu consigo chegar nos 344 bytes que a sefaz pede:

Exemplo gerado pelo código postado acima:

"YOXBBoAVZ/RnlTautWW0DzTgao15SQR8cyZ1cGJrvx6v+Ap6pH5oiOzIoPk3BBfp6KmTHOEyVTE6E80x/VZvMAyeCyvEm57wmFrUMmL7JcDTqbAvQFpEm71licVRsGaa0WVppko6SYHC58TTqqgpDZWU4q1gjkAJOn7VERyIJDlTXJe3uWrlyvH3z2iyd1ooa7gA4N/IVLzEOTk5ByosiNg+T3MUftNioo8McdhGNNSNk/kxZG2d0cCFw71YaiiyR2g1JGFH4bgH7bAC6vD8r4nECkZKVsyN7cHoSwcoAo3dbT6+TvWVToXgze2EU4w3Plq3BMxYmOJN0i31KWXMQw=="

A variavel data fica com 28 bytes.

A variavel hash fica com 32 bytes.

A variavel encrypted fica com 256 bytes.

E o resultado fica com 344 bytes.

Guilherme o meu encrypted deu 128, tem alguma ideia do que pode ser??

Apenas essa variável.

Obrigado.

 

Link para o comentário
Compartilhar em outros sites

Você esta utilizando explicitamente SHA256 para gerar a variavel encrypted? Se não me engano SHA não tem nenhuma variação que gera somente 128 bytes. MD5 gera 128 bytes.

Estou usando exatamente o seu código , 

Sim eu sei do MD5, mas me diz uma coisa qual o valor que o seu HashSizeValue da variável CSP, retorna?

o meu está retornando 0

Mas estranho que a variavel HASH está recebendo 32 (bytes) * 8 (bit) = 256bits

Só que quando assino ao invés de assinar com os 256bits ele assina com 128bits

 

Link para o comentário
Compartilhar em outros sites

Estou usando exatamente o seu código , 

Sim eu sei do MD5, mas me diz uma coisa qual o valor que o seu HashSizeValue da variável CSP, retorna?

o meu está retornando 0

Mas estranho que a variavel HASH está recebendo 32 (bytes) * 8 (bit) = 256bits

Só que quando assino ao invés de assinar com os 256bits ele assina com 128bits

 

 

csp.KeySize = 2048;

hash.HashSize = 256;

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...
  • Fundadores

3.1 - Não faça flooding - Inundar o fórum com posts repetidos, com a mesma dúvida ou as mesmas palavras é chamado de flooding. Isso é proibido. Apenas um post feito no lugar certo é suficiente. Pesquise antes de postar, talvez sua dúvida já está respondida em outro post.


 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

A chave é uma segurança da Sw.House... 

 

Imagine, se algum começa usar o SAT, informando o meu CNPJ como Sw.House...  Eu seria corresponsável pela emissão desses documentos...

 

O Certificado digital da Sw.House não precisa acompanhar o SAT... Veja esse post:

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Isso mesmo..

- Você computa a assinatura, usando o CNPJ do cliente e o seu...

- De alguma maneira, roda o método "AssociarAsinatura", no SAT do seu cliente, e informa a String gerada... (Isso poderia ser feito pelo próprio cliente, se bem instruído)

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Sempre que você for ativar o seu PDV em um cliente novo...

 

Esse método só precisa ser executado uma única vez...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

OK... Agora o ACBrEAD é capaz de realizar a mesma operação para o calculo de Assinatura, descrita no inicio desse Post...

 

Por favor veja esse post:

 

Exemplo de uso:

attachicon.gifDemoEAD.png

 

Boa tarde

 

Estou utilizando o demo ACBrEAD (atualizado), com um certificado A1, conforme o exemplo citado.

Porém ao gerar a assinatura fica com 172 caracteres.

Preciso alterar algo?

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2037 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.