Может кто-нибудь дать мне пример использования BouncyCastle для импорта .pem публичного DSA-ключа в c #? - PullRequest
4 голосов
/ 30 октября 2011

Я пытаюсь совместно импортировать ключ .pem в c #, и я нашел библиотеку, которая делает это: BouncyCastle

Я создал код, который загружает публичныеключ и предполагается загрузить данные в DSACryptoServiceProvider:

        DSA dsa;

        using (StreamReader rdr = new StreamReader(@"pubkey.pem"))
        {
            PemReader pr = new PemReader(rdr);
            DsaPublicKeyParameters o = pr.ReadObject() as DsaPublicKeyParameters;
            CspParameters prm = new CspParameters(13);
            prm.Flags = System.Security.Cryptography.CspProviderFlags.UseMachineKeyStore; 
            //o.Parameters.
            dsa = new DSACryptoServiceProvider(prm);
            DSAParameters dp = new DSAParameters();
            dp.G = o.Parameters.G.ToByteArray();
            dp.P = o.Parameters.P.ToByteArray();
            dp.Q = o.Parameters.Q.ToByteArray();                
            dp.Y = o.Y.ToByteArray();

            if (o.Parameters.ValidationParameters != null)
            {
                dp.Counter = o.Parameters.ValidationParameters.Counter;
                dp.Seed = o.Parameters.ValidationParameters.GetSeed();
            }

            //todo: missing: J, X?
            dsa.ImportParameters(dp);
        }

сбой на dsa.ImportParameters (dp);со следующим исключением: Криптографическое исключение: неверные данные.

Что я должен изменить, чтобы это работало?

1 Ответ

2 голосов
/ 31 октября 2011

Вам нужно использовать метод ToByteArrayUnsigned вместо простого ToByteArray, так как в противном случае в некоторых случаях представление байтового массива заканчивается начальным нулевым байтом, который разбивает все:)

...