SIGN ASSINATURA DIGITAL NO PADRÃO RSA SHA-1 BASE64

MALA 11/12/2023 15:06:59
#501948
1ª parte - URL para acessar o MDFe, seguido do caractere “?”
2ª parte - parâmetros chMDFe e tpAmb da mesma forma como na forma de emissão normal
separados pelo caractere “&”;
3ª parte – sign assinatura digital no padrão RSA SHA-1 (Base64) do valor do parâmetro chMDFe
(chave de acesso com 44 caracteres) a partir do certificado digital que assina o MDFe, este
parâmetro deve ser adicionado aos demais usando um caractere “&” como separador.

Como criar essa 3parte, alguem pode ajudar.
NILSONTRES 11/12/2023 21:54:29
#501954
Eu postei como fazer essa assinatura na época do inicio do SAT Fiscal, estou correndo agora não posso procurar, mas busca sobre SAT FISCAL nos códigos fonte. É um pequeno formulário com um exemplo.
MALA 11/12/2023 22:52:30
#501955
NILSON NAO ENCONTREI, ASSIM QUE VC TIVER UM TEMPO E PODER ME AJUDAR AGRADEÇO MUITO.
FUTURA 12/12/2023 07:54:32
#501956
Você vai usar isso no projeto MDFe ?, alguma regra nova ou evento ?
MALA 12/12/2023 08:46:51
#501957
Bom dia, não sei se e nova acredito que não, mas precisei emitir em contingência e meu qrcode estava errado, o qrcode em contingência e assim que monta.

1ª parte - URL para acessar o MDFe, seguido do caractere “?”
2ª parte - parâmetros chMDFe e tpAmb da mesma forma como na forma de emissão normal
separados pelo caractere “&”;
3ª parte – sign assinatura digital no padrão RSA SHA-1 (Base64) do valor do parâmetro chMDFe
(chave de acesso com 44 caracteres) a partir do certificado digital que assina o MDFe, este
parâmetro deve ser adicionado aos demais usando um caractere “&” como separador.

NILSONTRES 12/12/2023 21:28:00
#502903
Resposta escolhida
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Imports System.Security.Cryptography.Pkcs


Dim CERT As X509Certificate2
CERT = SelecionarCertificado(txt_certificado.Text.Trim) 'ou CERT = SelecionarCertificado("numero de serie")
If IsNothing(CERT) Then Exit Sub
TXT_ASSINATURA.Text = GeraAssinaturaSat(TXT_CHAVE_ASSOCIACAO.Text.Trim, CERT.SerialNumber)


Private Function SelecionarCertificado(ByVal CerSerie As String) As X509Certificate2
Dim certificate As New X509Certificate2
Try
Dim certificatesSel As X509Certificate2Collection
Dim store As New X509Store("MY", StoreLocation.CurrentUser)
store.Open(OpenFlags.OpenExistingOnly)
Dim certificates As X509Certificate2Collection = store.Certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, True).Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, True)
If (CerSerie = "") Then
certificatesSel = X509Certificate2UI.SelectFromCollection(certificates, "Certificados Digitais", "Selecione o Certificado Digital para uso no aplicativo", X509SelectionFlag.SingleSelection)
If (certificatesSel.Count = 0) Then
certificate.Reset()
Throw New Exception("Nenhum certificado digital foi selecionado ou o certificado selecionado está com problemas.")
Else
certificate = certificatesSel.Item(0)
End If
Else
certificatesSel = certificates.Find(X509FindType.FindBySerialNumber, CerSerie, True)
If (certificatesSel.Count = 0) Then
certificate.Reset()
Throw New Exception("Certificado digital não encontrado")
Else
certificate = certificatesSel.Item(0)
End If
End If
store.Close()
Return certificate
Catch exception As Exception
MsgBox(exception.Message, MsgBoxStyle.Critical, "AVISO")
Return Nothing
End Try
Return certificate
End Function

Private Function GeraAssinaturaSat(ByVal Sequencia As String, Serial As String) As String
Dim my As X509Store = New X509Store(StoreName.My, StoreLocation.CurrentUser)
my.Open(OpenFlags.ReadOnly)
Dim csp As RSACryptoServiceProvider = Nothing
Dim cert As X509Certificate2
For Each cert In my.Certificates
If cert.SerialNumber.Contains(Serial) Then 'numero de serie do certificado da software house
csp = DirectCast(cert.PrivateKey, RSACryptoServiceProvider)
End If
Next
If csp Is Nothing Then
Throw New Exception("Certificado não encontrado")
End If
Dim privateKey1 As New RSACryptoServiceProvider()
privateKey1.ImportParameters(csp.ExportParameters(True))
Dim data As Byte() = Encoding.UTF8.GetBytes(Sequencia)
Dim signature As Byte() = privateKey1.SignData(data, "SHA256")
Dim isValid As Boolean = privateKey1.VerifyData(data, "SHA256", signature)
Return Convert.ToBase64String(signature)
End Function
MALA 16/12/2023 09:44:02
#502908
Bom dia amigo, a função esta dando erro, mas nao consegui postar a imgem do erro, mandei no seu e-mail.

desde ja agradeço a atenção de todos
MALA 16/12/2023 11:41:29
#502909
Resolvido
Tópico encerrado , respostas não são mais permitidas