boa noite a todos
fiz uma pesquisa na net como assinar a xml da nota fiscal eletronica e encontrei esse codigo em vb.net, alguem consegue me ajudar a converte-lo pro access pra assinar uma xml
balaiotecnologico.blogspot.com/2012/07/assinando-documentos-xml-com-capicom-e.html
fiz uma pesquisa na net como assinar a xml da nota fiscal eletronica e encontrei esse codigo em vb.net, alguem consegue me ajudar a converte-lo pro access pra assinar uma xml
- Código:
Private Sub AssinarDocumentoXML(ByVal ArqXMLAssinar As String, ByVal TagXML As String)
'Pega o conteúdo XML que será assinado
Dim srdDocXml As StreamReader
Dim strXML As String
Dim strTagXml As String = TagXML
srdDocXml = file.OpenText(ArqXMLAssinar)
strXML = srdDocXml.ReadToEnd()
srdDocXml.Close()
'Representa uma coleção de objetos X509Certificate2
Dim objColecaoCertificadosX509 As X509Certificate2Collection = Nothing
'Instância que representa um certificado X509
Dim objCertificadoX509 As New X509Certificate2()
'Representa o local onde os certificados X509 são armazenados e
'seleciona os certificados locais e do usuário atual
Dim getCertificadosX509 As New X509Store("MY", StoreLocation.CurrentUser)
'Abrir em modo de leitura e apenas os certificados existentes
getCertificadosX509.Open (OpenFlags.ReadOnly Or OpenFlags.OpenExistingOnly)
'Procure por certificados usando o número serial como parâmetro, o último parâmetro indica para a
'função retornar somente certificados válidos
objColecaoCertificadosX509 = getCertificadosX509.Certificates.Find(X509FindType.FindBySerialNumber, p_NumeroSerialCertificado, True)
'Verifica se existe algum certificado selecionado
If objColecaoCertificadosX509.Count > 0 Then
'Selecionar o certificado e armazena na váriavel
objCertificadoX509 = objColecaoCertificadosX509.Item(0)
Dim docXML = New XmlDocument() 'Iniciamos um novo documento XML
docXML.preserveWhiteSpace = False 'Não deixar espaços no documento
docXML.Load (ArqXMLAssinar) 'Carrega o XML
'Retorna a quantidade de tags de assinatura, deve existir apenas uma.
If docXML.getElementsByTagName(strTagXml).Count = 1 Then
'Classe usada para assinar o documento XML
Dim signedXml As New Xml.SignedXml(docXML)
'Configura a chave de assinatura
SignedXml.SigningKey = objCertificadoX509.PrivateKey
'Representa o elemento de referência da assinatura digital do XML
Dim Referencia As New Xml.Reference()
' Representar a idendificação do elemento de assinatura
Referencia.Uri = ""
'Essa classe remove os elementos de assintura <Signature> antes de
'criar um digest do documento XML.
Dim env As New XmlDsigEnvelopedSignatureTransform
'Adicionamos o elemento na referência
Referencia.AddTransform (env)
'Representa a canonização C14N XML
Dim c14 As New XmlDsigC14NTransform
'Adicionamos o elemento na referência
Referencia.AddTransform (c14)
'Adiciona as referências na assinatura
SignedXml.AddReference (Referencia)
'A Classe KeyInfo representa o elemento <KeyInfo> da assinatura digital
Dim KeyInfo As New KeyInfo
'Carrega o certificado usando o objetoKeyInfoX509Data e
'adiciona ao elemento <KeyInfo>
KeyInfo.AddClause(New KeyInfoX509Data(objCertificadoX509))
'Adiciona o objeto KeyInfo na assinatura
SignedXml.KeyInfo = KeyInfo
'Computa a assinatura digital
signedXml.ComputeSignature()
'Cria um novo elemento XML
Dim xmlDigitalSignature As XmlElement
'Pega a assinatura digital e adiciona ao elemento
xmlDigitalSignature = SignedXml.GetXml()
' Gravar o elemento no final do documento XML
docXML.documentElement.appendChild (docXML.importNode(xmlDigitalSignature, True))
'Salva o documento XML já assinado
Dim EscreverXML As New StreamWriter(ArqXMLAssinar)
EscreverXML.Write (docXML.OuterXml)
EscreverXML.Close()
End If
End If
MsgBox (ex.Message)
End Sub
balaiotecnologico.blogspot.com/2012/07/assinando-documentos-xml-com-capicom-e.html