2017-06-08 9 views
1

私は他の暗号の事を学ぶためにそれを使用しようとすると、弾力のある城とcsrをデコードする方法を学ぼうとしています。Bouncy CastleデコードCSR c#

私はC#just javaのドキュメントも見つかりません。ここで

は私がDecodeCSR(string str)を呼んでいる方法は次のとおりです。

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

ここで私は(下記付属)IO例外を取得しています、私の主な問題は、私は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

DecodeCSRメソッドのコードを含めて忘れてしまったようです。 – Egl

+0

@Eglありがとうございました! – HelpMeWithArrays

答えて

2

CSRをバイト配列に間違ってデコードしようとしています。そのような私たちがする必要がある。この一つとしてCSRをデコードするに

-----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----- 

:ここ

が、私はこの質問に答えるために作成したテストCSRのトップからライン-----BEGIN NEW CERTIFICATE REQUEST----------END NEW CERTIFICATE REQUEST-----を削除

  • とbottom、
  • 残りの文字をBase64からバイト配列に変換します。
  • 結果のバイト配列をPkcs10CertificateRequestに渡します。

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

    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); 
    

    私は上記の私のCSRにこのコードを実行し、それは出力の次の行を書き込みます。ここでは

は、CSRをデコードし、サブジェクト名を出力しますいくつかのコードです

+0

またはOrg.BouncyCastle.OpenSsl.PemReaderを使用して更新しました。Pkcs10CertificationRequest decodedCsr =(Pkcs10CertificationRequest)new PemReader(new StringReader(csr))。ReadObject(); –

+0

@PeterDettman:それを別の回答として投稿することは自由です。 –

1

ルーク・ウッドワードの答えはかなり正しいです。私はOrg.BouncyCastle.OpenSsl.PemReaderによって機能が直接実装されていることのみ追加されます:

簡潔さから離れて
Pkcs10CertificationRequest decodedCsr = (Pkcs10CertificationRequest)new PemReader(new StringReader(csr)).ReadObject(); 

、これはより良い構文チェックを含めて、どちらで使用していないヘッダと暗号化(のようなものをサポートするため好ましいです。この特定の例)。

関連する問題