2017-06-08 6 views
1

J'essaie d'apprendre à décoder une RSC avec le château gonflable que j'ai l'intention de l'utiliser pour apprendre d'autres choses crypto.Château Bouncy Decode CSR C#

Je ne trouve pas non plus de documentation pour C# just java.

Voilà comment j'appelle DecodeCSR(string str):

static void Main(string[] args) 
    { 
     string csr = "-----BEGIN NEW CERTIFICATE REQUEST-----..."; 
     DecodeCSR(csr); 
     Console.ReadLine(); 
    } 

Voilà ma méthode où je reçois une exception IO (inclus ci-dessous), mon principal problème est que je ne sais pas quoi donner Pkcs10CertificationRequest.

private static void DecodeCSR(string csr) 
    { 
     try 
     { 
      byte[] csrEncode = Encoding.UTF8.GetBytes(csr); 
      Pkcs10CertificationRequest csrDecoder = new Pkcs10CertificationRequest(csrEncode); 
      byte[] csrDecode = csrDecoder.GetEncoded(); 
     } 
     catch (IOException e) 
     { 
      Console.WriteLine(e); 
     } 

    } 
System.IO.IOException: unknown tag 13 encountered 
    at Org.BouncyCastle.Asn1.Asn1InputStream.BuildObject(Int32 tag, Int32 tagNo, Int32 length) 
    at Org.BouncyCastle.Asn1.Asn1InputStream.ReadObject() 
    at Org.BouncyCastle.Asn1.Asn1Object.FromByteArray(Byte[] data) 
    at Org.BouncyCastle.Pkcs.Pkcs10CertificationRequest..ctor(Byte[] encoded) 
+0

Il semble que vous avez oublié y compris le code de la méthode DecodeCSR – Egl

+0

@Egl Merci! J'ai mis à jour la question – HelpMeWithArrays

Répondre

2

Vous tentez de décoder le CSR dans un tableau d'octets dans le mauvais sens.

est ici un CSR test j'ai créé pour répondre à cette question:

-----BEGIN NEW CERTIFICATE REQUEST----- 
MIIC3zCCAccCAQAwajELMAkGA1UEBhMCWFgxEDAOBgNVBAgTB1Vua25vd24xEDAOBgNVBAcTB05v 
d2hlcmUxGjAYBgNVBAoTEVRlc3RlcnMgVW5saW1pdGVkMQ0wCwYDVQQLEwRUZXN0MQwwCgYDVQQD 
EwNCb2IwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUf5kRJVMNwPu+nEnJ3Av5J59H 
vkeU0fOQtI+ezvHoJXc0A4iGDBm9PUw+eAXHw237Yu7+AyzgQCD8mwQt/lHLjXG/yeX66PhTFlzH 
Lhk4rqL9PQATbl4uCYtWoJmeEOWHL26dfI//AFsL9/smVyjD1mJfee6998PwwHB6BxqSaqXiR1Et 
lC4jx+B2E6btvMtREQ94cECoQudSgo3MRMBH+FuEcCofNtwosEpptjIN59ywVfDDU2Me58r930Ej 
A8EZbXwYpUjwaHtXK80TKq8yF3Af7Hbt6FhkXOv1QtF0EYUKvE4BVTAx4mPLUy2mct8Ft8/+/Lbt 
HDmslaBCAFZrAgMBAAGgMDAuBgkqhkiG9w0BCQ4xITAfMB0GA1UdDgQWBBRt0aHvY5c29iUS6/7E 
3FC+Bn3FNDANBgkqhkiG9w0BAQsFAAOCAQEAe+e+3WfxJd/ztcIDRR8YfVkeOlE0b8Erze13fQi/ 
GsBJQ2MF/7T8x/8ZF2CqusrmLTzb5sY5qVKlRgnguow6xnGu0QOiJdC4kgoqgAaxDwz/eIhMGkt9 
hyfTkMWiMD0OfYpdhXWUHrvbzWyUNI1ouWjOoqS03LvSiT4Cq+7Xca8ETVyuBN1FZeFUxO59goqI 
eKKenzPqJHcPUjkQbUBgsfKpuRXveRG+vacCt0chWUK4TEVyPzH2EDH0kiQh6dsVizKrHUihh5K/ 
BhZNqzyBW7G5vbxq4wBz7cLDskfqTsOnHRsAlYmNsXO2wV1LQ2f04F+FHIzZ+IWaO86cxTPMtA== 
-----END NEW CERTIFICATE REQUEST----- 

Pour décoder un CSR comme celui-ci, nous devons:

  • supprimer les lignes -----BEGIN NEW CERTIFICATE REQUEST----- et -----END NEW CERTIFICATE REQUEST----- du haut et bottom,
  • convertir les caractères restants de Base64 en un tableau d'octets.
  • passez le tableau d'octets résultant à Pkcs10CertificateRequest.

est ici un code qui décode un CSR et imprime le nom du sujet:

string csr = "...."; 

    char[] characters = 
     csr.Replace("-----BEGIN NEW CERTIFICATE REQUEST-----", "") 
     .Replace("-----END NEW CERTIFICATE REQUEST-----", "") 
     .ToCharArray(); 

    byte[] csrEncode = Convert.FromBase64CharArray(characters, 0, characters.Length); 
    Pkcs10CertificationRequest decodedCsr = new Pkcs10CertificationRequest(csrEncode); 
    Console.WriteLine(decodedCsr.GetCertificationRequestInfo().Subject); 

Quand je lance ce code sur ma RSE ci-dessus, il écrit la ligne suivante de la production:

C=XX,ST=Unknown,L=Nowhere,O=Testers Unlimited,OU=Test,CN=Bob 
+0

Ou en utilisant Org.BouncyCastle.OpenSsl.PemReader: Pkcs10CertificationRequest decodedCsr = (Pkcs10CertificationRequest) nouveau PemReader (new StringReader (csr)). ReadObject(); –

+0

@PeterDettman: n'hésitez pas à poster cette réponse séparément. –

1

La réponse de Luke Woodward est tout à fait correcte. J'ajouterai seulement que la fonctionnalité est implémentée directement par Org.BouncyCastle.OpenSsl.PemReader:

Pkcs10CertificationRequest decodedCsr = (Pkcs10CertificationRequest)new PemReader(new StringReader(csr)).ReadObject(); 

Outre la brièveté, cela est préférable d'inclure une meilleure vérification de la syntaxe, et supportant des choses comme les en-têtes et le chiffrement (ni utilisés dans cet exemple particulier).