Надувной замок Decode CSR C#
Я пытаюсь научиться декодировать csr с помощью надувного замка, так как собираюсь использовать его для изучения других криптовалют.
Я также не нахожу никакой документации для C# просто Java.
Вот как я звоню DecodeCSR(string str)
:
static void Main(string[] args)
{
string csr = "-----BEGIN NEW CERTIFICATE REQUEST-----...";
DecodeCSR(csr);
Console.ReadLine();
}
Вот мой метод, где я получаю IO Exception(Включено ниже), моя главная проблема в том, что я не знаю, что дать 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)
2 ответа
Ответ Люка Вудворда совершенно правильный. Добавлю только, что функциональность реализована непосредственно Org.BouncyCastle.OpenSsl.PemReader:
Pkcs10CertificationRequest decodedCsr = (Pkcs10CertificationRequest)new PemReader(new StringReader(csr)).ReadObject();
Помимо краткости, это предпочтительно для включения лучшей проверки синтаксиса и поддержки таких вещей, как заголовки и шифрование (ни один не используется в этом конкретном примере).
Вы пытаетесь неправильно декодировать 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-----
сверху и снизу, - преобразовать оставшиеся символы из Base64 в байтовый массив.
- передать полученный байтовый массив
Pkcs10CertificateRequest
,
Вот некоторый код, который декодирует CSR и печатает имя субъекта:
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 выше, он записывает следующую строку:
C=XX,ST=Unknown,L=Nowhere,O=Testers Unlimited,OU=Test,CN=Bob