/// <summary> /// Assina o Dados. /// </summary> /// <param name="dados">Dados a ser assinado</param> /// <param name="LocalRepositorio">Local onde está armazonado o certificado digital.</param> /// <param name="NomeCertificado">Nome (SubjectName) do certificado digital.</param> public string AssinarDados(string dados, string LocalRepositorio, string NomeCertificado, string tag) { X509Certificate2 certificadoX509 = Certificado.ObterCertificado(LocalRepositorio, NomeCertificado, this.Configuration); //byte[] messageToSignBytes = Encoding.GetEncoding("iso-8859-1").GetBytes(dados.Trim()); var converter = new ASCIIEncoding(); byte[] messageToSignBytes = converter.GetBytes(dados.Trim()); RSA rsa = (RSA)certificadoX509.PrivateKey; (certificadoX509.PrivateKey as RSACng).Key.SetProperty( new CngProperty( "Export Policy", BitConverter.GetBytes((int)CngExportPolicies.AllowPlaintextExport), CngPropertyOptions.Persist)); //RSAParameters RSAParameters = rsa.ExportParameters(true); //HashAlgorithm hasher = new SHA1Managed(); // Use the hasher to hash the message //byte[] hash = hasher.ComputeHash(messageToSignBytes); var signature = rsa.SignData(messageToSignBytes, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); //var cipher01 = rsa.SignHash(hash, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); return(Convert.ToBase64String(signature)); }
/// <summary> /// Assina o documento XML. /// </summary> /// <param name="doc">Documento XML.</param> /// <param name="TagAssinatura">Tag do XML que deverá ser assinada.</param> /// <param name="LocalRepositorio">Local onde está armazonado o certificado digital.</param> /// <param name="NomeCertificado">Nome (SubjectName) do certificado digital.</param> public void AssinarXmlDocument(XmlDocument doc, string LocalRepositorio, string NomeCertificado, string tag) { X509Certificate2 certificadoX509 = Certificado.ObterCertificado(LocalRepositorio, NomeCertificado, this.Configuration); AssinarXml(doc, certificadoX509, tag); }