Encrypt XML with TJMG Public Key

Asked

Viewed 446 times

4

I need to encrypt this XML

<?xml version="1.0" encoding="utf-8"?><Selos>  <CodigoServentia>0000000099</CodigoServentia><Selo><CodigoSequencialUnico>ABC00005</CodigoSequencialUnico><CodigoDeSeguranca>0000000123456879</CodigoDeSeguranca><SeloConsulta></SeloConsulta><DataUtilizacao>  /  /     0:00:00</DataUtilizacao><Ato><CodigoFiscalDoAto>0</CodigoFiscalDoAto><AnoReferenciaTabela></AnoReferenciaTabela><DataPraticaAto>0</DataPraticaAto><ComposicaoAto><TipoTributacao>0</TipoTributacao><ValorEmolumento>0</ValorEmolumento><ValorTFJ>0</ValorTFJ><ValorFinalUsuario>0</ValorFinalUsuario><Protocolo>0</Protocolo><TipoLivro>301</TipoLivro><OrdemSequencial>0</OrdemSequencial><Folha>0</Folha><NumeroDeOrdem>0</NumeroDeOrdem></ComposicaoAto></Ato></Selo><Selo><CodigoSequencialUnico>ABC00006</CodigoSequencialUnico><CodigoDeSeguranca>0000000121545688</CodigoDeSeguranca><SeloConsulta></SeloConsulta><DataUtilizacao>  /  /     0:00:00</DataUtilizacao><Ato><CodigoFiscalDoAto>0</CodigoFiscalDoAto><AnoReferenciaTabela></AnoReferenciaTabela><DataPraticaAto>0</DataPraticaAto><ComposicaoAto><TipoTributacao>0</TipoTributacao><ValorEmolumento>0</ValorEmolumento><ValorTFJ>0</ValorTFJ><ValorFinalUsuario>0</ValorFinalUsuario><Protocolo>0</Protocolo><TipoLivro>301</TipoLivro><OrdemSequencial>0</OrdemSequencial><Folha>0</Folha><NumeroDeOrdem>0</NumeroDeOrdem></ComposicaoAto></Ato></Selo><Selo><CodigoSequencialUnico>ABC00007</CodigoSequencialUnico><CodigoDeSeguranca>0000000254326448</CodigoDeSeguranca><SeloConsulta></SeloConsulta><DataUtilizacao>  /  /     0:00:00</DataUtilizacao><Ato><CodigoFiscalDoAto>0</CodigoFiscalDoAto><AnoReferenciaTabela></AnoReferenciaTabela><DataPraticaAto>0</DataPraticaAto><ComposicaoAto><TipoTributacao>0</TipoTributacao><ValorEmolumento>0</ValorEmolumento><ValorTFJ>0</ValorTFJ><ValorFinalUsuario>0</ValorFinalUsuario><Protocolo>0</Protocolo><TipoLivro>301</TipoLivro><OrdemSequencial>0</OrdemSequencial><Folha>0</Folha><NumeroDeOrdem>0</NumeroDeOrdem></ComposicaoAto></Ato></Selo><Selo><CodigoSequencialUnico>ABC00008</CodigoSequencialUnico><CodigoDeSeguranca>0000000586786542</CodigoDeSeguranca><SeloConsulta></SeloConsulta><DataUtilizacao>  /  /     0:00:00</DataUtilizacao><Ato><CodigoFiscalDoAto>0</CodigoFiscalDoAto><AnoReferenciaTabela></AnoReferenciaTabela><DataPraticaAto>0</DataPraticaAto><ComposicaoAto><TipoTributacao>0</TipoTributacao><ValorEmolumento>0</ValorEmolumento><ValorTFJ>0</ValorTFJ><ValorFinalUsuario>0</ValorFinalUsuario><Protocolo>0</Protocolo><TipoLivro>301</TipoLivro><OrdemSequencial>0</OrdemSequencial><Folha>0</Folha><NumeroDeOrdem>0</NumeroDeOrdem></ComposicaoAto></Ato></Selo><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>XJWsbgzfmsU3jKBK3dIByMWGqfI=</DigestValue></Reference></SignedInfo><SignatureValue>DA1mqec3eS8SEtbj3T0h1w5XX7mXRvfNjvq1vkqHtyUWZAZ5KASPaaIp1XhRt471x8uCYsL2zI+b6HRAusRFC4h/JEJDTjfR2aqSUNxhTAmgXuOXHXfohCb7lgpyj5N/VFkJO64if5ro1LPN2Vx00rCo/QlXsayJ70MPfyjow+exHWuzLmD/sganHLSzCE1RoEASgzKypsrzWpIvTpvTL9zqZkNmc9Sjqxcv9iYCHV19fha2jH2OvKGecWmgjTxtEp39q7bBbT+otqNQArVuzKtgRGYrAvVuxJ0ag++YwR7AmcyHfGnjtivCB/nywrvknqeiG34zYsJEdH0HxbpraQ==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIINjCCBh6gAwIBAgIQKJ5GtGIn9FIhJPMNgsmNqDANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRwwGgYDVQQDExNBQyBDZXJ0aXNpZ24gUkZCIEc0MB4XDTE0MTEwNTAwMDAwMFoXDTE1MTEwNDIzNTk1OVowgegxCzAJBgNVBAYTAkJSMRMwEQYDVQQKFApJQ1AtQnJhc2lsMQswCQYDVQQIEwJQUjEVMBMGA1UEBxQMQ2FtcG8gTW91cmFvMTYwNAYDVQQLFC1TZWNyZXRhcmlhIGRhIFJlY2VpdGEgRmVkZXJhbCBkbyBCcmFzaWwgLSBSRkIxFjAUBgNVBAsUDVJGQiBlLUNOUEogQTExIjAgBgNVBAsUGUF1dGVudGljYWRvIHBvciBBUiBGQUNJQVAxLDAqBgNVBAMTI0xXIFNPRlRXQVJFUyBMVERBIE1FOjAxNzYxMTM1MDAwMTMyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkJusSfrhyVOSwTVQYyq48WrEKPL/58/rPAj9k+Xy1PoZdklDf8xo6k50XY46bkcJWPQIe+919UtVO90UMwHDT0iIdzZe9ztnd+8EOkyqIEaBVhLgNTZIpjmZd26iYhYLhwlbi7oPj8Aap2dR0qHkN4nLPusm5CoIedSbVwaOGSzKPj2e9Qhr0Ieq8nXYgxKLKvh4YEZ4JN4pV0BTDYHDbab5nDdKyO+hb8m3yycUxnzUpF5rdGEfFDCc3MacxVVQSN08abUIs0R7U5yI/y+syASyugS0N40GBKAQHJD33wOxebIw2sLE9VVcpa8itnnToj9Ms3Zw9qLCgvp9xF0JlwIDAQABo4IDSTCCA0Uwga4GA1UdEQSBpjCBo6A4BgVgTAEDBKAvBC0yODAyMTk3NjkyOTAyMzQwOTE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDCgHQYFYEwBAwKgFAQSTUFSQ0VTRSBNQVNDSElFVFRPoBkGBWBMAQMDoBAEDjAxNzYxMTM1MDAwMTMyoBcGBWBMAQMHoA4EDDAwMDAwMDAwMDAwMIEUZWxpemFAdW5pbWFrZS5jb20uYnIwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBQukerWbeWyWYLcOIUpdjQWVjzQPjAOBgNVHQ8BAf8EBAMCBeAwfwYDVR0gBHgwdjB0BgZgTAECAQwwajBoBggrBgEFBQcCARZcaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9kcGMvQUNfQ2VydGlzaWduX1JGQi9EUENfQUNfQ2VydGlzaWduX1JGQi5wZGYwggEWBgNVHR8EggENMIIBCTBXoFWgU4ZRaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUNDZXJ0aXNpZ25SRkJHNC9MYXRlc3RDUkwuY3JsMFagVKBShlBodHRwOi8vaWNwLWJyYXNpbC5vdXRyYWxjci5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDQ2VydGlzaWduUkZCRzQvTGF0ZXN0Q1JMLmNybDBWoFSgUoZQaHR0cDovL3JlcG9zaXRvcmlvLmljcGJyYXNpbC5nb3YuYnIvbGNyL0NlcnRpc2lnbi9BQ0NlcnRpc2lnblJGQkc0L0xhdGVzdENSTC5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIGbBggrBgEFBQcBAQSBjjCBizBfBggrBgEFBQcwAoZTaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9jZXJ0aWZpY2Fkb3MvQUNfQ2VydGlzaWduX1JGQl9HNC5wN2MwKAYIKwYBBQUHMAGGHGh0dHA6Ly9vY3NwLmNlcnRpc2lnbi5jb20uYnIwDQYJKoZIhvcNAQELBQADggIBAAaCUDNCXOzenD8/kSX1hPMsbjO0kvoBjE7wXVqzvwqu7iwoOn5kRlkNPZjmIR8HaJrcvQ/9k2DtM9FbJySiglz6ietsfl2oi8m2lv0RrWPM+RsmSixaF8M8hNSsV5dsHbrha4GZCJN2XWCQvEAQJt13XJBmMaufHZg/umYeVpBhdLvRboG+CxoQHBdNDi58nz+iMyIDtEt5BtOZif6045LN6GuRrIDj9Sm1ogqDDi621G9QsOOooIbz+b3lK4eBXawJDrvjlaIZDaOoKazzbhy2BpJf6q5txAyJauWxxPnb4AYtU1qJNUVSr+2k03F1qhIzPZJ8w0wnSavqbrsV/X8Uy6AWHFqliLdcBcpsQEibzbWO+GwcdtzcCGDL0kZELDKWekwKM7CerNWvSMsOC4uJnPfGuyCfd1P2oZu5+G5g0fee38CVPB0+YSJlE9Ers8UTStJu5t8mq+7NhUyd04C4g5yqTyUkRDv/SPKEN4DfEL1nQ/wPXLNFxCyJnrpCphFDDC8aTDmMPdireltbLLIf8bL9ujHYOgPWkZISn+vYwfXj6jHj4l9Iy59rT8MT9TUFHn9dM/HiIABh3XcoA9756dh3wxZaBewcextxv/3fsVygkL7531vGJijQsH2GS7oAuMexfMJMVOOjHDKukoHfo6qX0VRz9q6yNI/rYmN0</X509Certificate></X509Data></KeyInfo></Signature></Selos>

With this public key:

-----BEGIN CERTIFICATE----- 
MIIDczCCAlugAwIBAgIEZ2F1WDANBgkqhkiG9w0BAQsFADBqMQswCQYDVQQGEwJCUjEVMBMGA1UE
CBMMTWluYXMgR2VyYWlzMRcwFQYDVQQHEw5CZWxvIEhvcml6b250ZTENMAsGA1UEChMEVEpNRzEN
MAsGA1UECxMEVEpNRzENMAsGA1UEAxMEVEpNRzAeFw0xMzA3MDIxNjM5MDBaFw0xMzA5MzAxNjM5
MDBaMGoxCzAJBgNVBAYTAkJSMRUwEwYDVQQIEwxNaW5hcyBHZXJhaXMxFzAVBgNVBAcTDkJlbG8g
SG9yaXpvbnRlMQ0wCwYDVQQKEwRUSk1HMQ0wCwYDVQQLEwRUSk1HMQ0wCwYDVQQDEwRUSk1HMIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApyliHR49lF/XcMCt0EjHcqzWwG0TjMzRX41O
SmYDNx3yJOs4vnUKxVE4sLaeCePNbFpIo+PJadEoLvl3z2Z8kbLjbTA+72+d1uJRFG7jhczPtIzh
kpeqTkwbwUn3pm3YeF8UslWe/EjpXxbi6BYCWkR+qf352QNX7kYLM6dtOv/bBOtmjh3ZibHbTnEh
clMSUIBhLWfkaCn7PgMKZLszshz+g7436v4/7/hKEeMTLmlhmw7P06ahcaJsYEdCSVaD60hnl5W3
4DtsHBv1sn4MrUjs5RS5lI/s6l8T8XQP70RG4WpKDHO2PbzbjPo9xvxm0C70ur/daBqejU8yd5dR
IQIDAQABoyEwHzAdBgNVHQ4EFgQUVqwwZs4ff9j9qu1asmIoz1dh8RgwDQYJKoZIhvcNAQELBQAD
ggEBADyO+v79KDRDqJFRyRkkOGNlM5iYiGVxMdh/GSsTZzqPCeciNlDAh5lzi1q4NIHjbzhTdPtR
qgPz+LZFZkt7mlvhxHxmzEJC+SAuzL4PfZy/MqWAYu+fQ+SzzG/yLgVjgJgOzCD8Hlmt8FjLHXOr
h71wNmSPc3DUEuE0fDK64sZjMB3cL9ja/RmKPUVglDo9CUFPHghTpKcwz/cTP1OTXBjT7dEFUK5A
Tw889z1NVg3QMn4MKbcRtFWsMOb7vaEhjmLHoxp7/fsdGn2b+FSK3QqMjcE6HOh27v4AVXogS2Io
WIKxMWI3LhAsGtOcGCynXLXsTvJriXYyO5IvlZvsYk0=
-----END CERTIFICATE-----

How do I pass this key in the encryption? (that’s how I tried to do it)

            string key = "MIIDczCCAlugAwIBAgIEZ2F1WDANBgkqhkiG9w0BAQsFADBqMQswCQYDVQQGEwJCUjEVMBMGA1UE" +
                        "CBMMTWluYXMgR2VyYWlzMRcwFQYDVQQHEw5CZWxvIEhvcml6b250ZTENMAsGA1UEChMEVEpNRzEN" +
                        "MAsGA1UECxMEVEpNRzENMAsGA1UEAxMEVEpNRzAeFw0xMzA3MDIxNjM5MDBaFw0xMzA5MzAxNjM5" +
                        "MDBaMGoxCzAJBgNVBAYTAkJSMRUwEwYDVQQIEwxNaW5hcyBHZXJhaXMxFzAVBgNVBAcTDkJlbG8g" +
                        "SG9yaXpvbnRlMQ0wCwYDVQQKEwRUSk1HMQ0wCwYDVQQLEwRUSk1HMQ0wCwYDVQQDEwRUSk1HMIIB" +
                        "IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApyliHR49lF/XcMCt0EjHcqzWwG0TjMzRX41O" +
                        "SmYDNx3yJOs4vnUKxVE4sLaeCePNbFpIo+PJadEoLvl3z2Z8kbLjbTA+72+d1uJRFG7jhczPtIzh" +
                        "kpeqTkwbwUn3pm3YeF8UslWe/EjpXxbi6BYCWkR+qf352QNX7kYLM6dtOv/bBOtmjh3ZibHbTnEh" +
                        "clMSUIBhLWfkaCn7PgMKZLszshz+g7436v4/7/hKEeMTLmlhmw7P06ahcaJsYEdCSVaD60hnl5W3" +
                        "4DtsHBv1sn4MrUjs5RS5lI/s6l8T8XQP70RG4WpKDHO2PbzbjPo9xvxm0C70ur/daBqejU8yd5dR" +
                        "IQIDAQABoyEwHzAdBgNVHQ4EFgQUVqwwZs4ff9j9qu1asmIoz1dh8RgwDQYJKoZIhvcNAQELBQAD" +
                        "ggEBADyO+v79KDRDqJFRyRkkOGNlM5iYiGVxMdh/GSsTZzqPCeciNlDAh5lzi1q4NIHjbzhTdPtR" +
                        "qgPz+LZFZkt7mlvhxHxmzEJC+SAuzL4PfZy/MqWAYu+fQ+SzzG/yLgVjgJgOzCD8Hlmt8FjLHXOr" +
                        "h71wNmSPc3DUEuE0fDK64sZjMB3cL9ja/RmKPUVglDo9CUFPHghTpKcwz/cTP1OTXBjT7dEFUK5A" +
                        "Tw889z1NVg3QMn4MKbcRtFWsMOb7vaEhjmLHoxp7/fsdGn2b+FSK3QqMjcE6HOh27v4AVXogS2Io" +
                        "WIKxMWI3LhAsGtOcGCynXLXsTvJriXYyO5IvlZvsYk0=";

            // Instancia a class EncryptedXml.
            EncryptedXml exml = new EncryptedXml(xmlDoc);
            XmlElement elementToEncrypt = xmlDoc.GetElementsByTagName("Selos")[0] as XmlElement;

            try
            {
                EncryptedData edElement = exml.Encrypt(elementToEncrypt, key);

                //////////////////////////////////////////////////// 
                // Replace the element from the original XmlDocument 
                // object with the EncryptedData element. 
                ////////////////////////////////////////////////////

                EncryptedXml.ReplaceElement(elementToEncrypt, edElement, false);

            }

Returns the following exception

Unable to recover encryption key.

  • Is that C#, Java, another language? And I’ll repeat what I commented on in your other question: if you post the exception entire (message, class and stack trace) there’s a better chance someone can help you...

  • 1

    That same friend is C#, the full stack trace: It is not possible to recover the encryption key. System.Security in System.Security.Cryptography.xml.Encryptedxml.Encrypt(Xmlelement inputElement, String keyName) in Lib.LibXml.encryptXml(String filename) na c: Users Renan Appdata Roaming Skype My Skype Received Files Testedescriptografarxml Testedescriptografarxml Testedescriptografarxml Lib.Cs:line 129

  • Well, I’ve seen the error: the second argument to Encrypt should be the name of the key in the mapping, not the key itself. When solving, I’m still searching...

  • P.S. Another potential problem is that Encrypt, to my knowledge, it requires an encryption algorithm symmetrical - the one you’re using is asymmetrical for sure (or wouldn’t have a "public key"), probably RSA (by key size).

  • Renan, you managed to encrypt the file with the public key?

Show 1 more comment

1 answer

1

I don’t know if you’ve solved it yet, but for all intents and purposes try this:

X509Certificate2 cert;
try
{
    //X509Store storeMy = new X509Store(StoreName.My, StoreLocation.CurrentUser);
    //storeMy.Open(OpenFlags.ReadOnly);
    X509Certificate2Collection certs = new X509Certificate2Collection(new X509Certificate2("tjmg.cer"));
    cert = certs[0];
    //storeMy.Close();
}
catch { return false; }

XmlElement elemento = xmlDoc.GetElementsByTagName("Selos")[0] as XmlElement;

if (elemento == null) { return false; }

EncryptedXml criptografado = new EncryptedXml();
EncryptedData data = criptografado.Encrypt(elemento, cert);

EncryptedXml.ReplaceElement(elemento, data, false);

xmlDoc.Save(this.saida);
return true;

Browser other questions tagged

You are not signed in. Login or sign up in order to post.