rsacryptoserviceprovider, использующий x509 сертификаты c#

Даже если бы это называют "сотнями и сотнями" времен, я сказал бы, что это - преждевременная оптимизация. Если результат более ясен как пустой массив, используйте это.

Теперь для фактического ответа: да, пустой массив берет некоторую память. Это имеет обычный объект наверху (8 байтов на x86, я верю), и 4 байта для количества. Я не знаю, существует ли что-нибудь кроме того, но это не совсем свободно. (Это невероятно дешево хотя...)

, К счастью, существует оптимизация, которую можно сделать, не ставя под угрозу сам API: имейте "константу" пустого массива. Я сделал другое небольшое изменение для создания кода более ясным, если Вы разрешите...

private static readonly string[] EmptyStringArray = new string[0];

string[] GetTheStuff() {
    if( somePredicate() ) {
        List s = new List(); 
        // imagine we load some data or something
        return s.ToArray();
    } else {
        return EmptyStringArray;
    }
}

при нахождении этого часто Вы могли бы даже создать универсальный класс со статическим участником для возврата пустого массива правильного типа. Путем работа дженериков.NET делает это тривиальным:

public static class Arrays {
    public static readonly Empty = new T[0];
}

(Вы могли обернуть его в свойство, конечно.)

Тогда просто использование: Arrays< строка>.Empty;

РЕДАКТИРОВАНИЕ: я только что помнил сообщение Eric Lippert на массивах . Вы уверены, что массив самый соответствующий тип должен возвратиться?

7
задан bkhanal 9 August 2016 в 11:10
поделиться

2 ответа

Наконец-то я нашел проблему. Я не помещал ключ в makecert, чтобы определить его как ключ RSA Crypto.

1
ответ дан 6 December 2019 в 21:16
поделиться

Следующий код мне подходит:

        RSACryptoServiceProvider privateKey = new RSACryptoServiceProvider();
        privateKey.FromXmlString("<RSAKeyValue><Modulus>wL8s+C8SnnlaaqR+VsyijmxOJOARNa4o7ZNsqfy3+9J9Ol2JNSjjMfQWoUnFtClzJBlZhU5KtuazQe8ZKXTX9YvKoJdRhlsonZkC04qiTMdO/FZIH00GrCRxeQ7XDnQnvPB9Bdsvs//7zrY3f7eLIkpIyK9cQHU+5jjJd5IT0eE=</Modulus><Exponent>AQAB</Exponent><P>83xxN7jvpg5z16pxz2tIQIdqd/EfmikR9Q2TjG2tosWkUSvtyx0xHZ9EqdTUbSGZZ+jgrabzkafYc7Mplylwew==</P><Q>yqcnYSZEXHwJvRWi2V09PNEENTozQZywcFptUUGar9TciaQvoNv3lpnfzUKNBRdhzq4lImxkamajZlTWE5buUw==</Q><DP>37HqilkbwyHwB6mOGhPkM3S1ujAK6qTk3JB2iEOTjMGrru9+7maJYz+Z47Wm3ARMXgyzrpZ9m8nqsJFfmoL11Q==</DP><DQ>v285tv8kMs2FkZYfuP/oOkwkkneBNejjj68Md2bmzlThZDCyQV2pvB1tmgPVHUsiPNCrCaKlFRISJzfa5rR8Ow==</DQ><InverseQ>fgJE2TRe/SS+YqW0/I+FtHrdfbbao0/R3pHD4r4oceZQUemlBgZ7DxOAetebHKthlOdjGkmfWYB8EU4XoWggqw==</InverseQ><D>FMLCwjy3wbAKiCANp6XFAJgz1o7365NFv0k41BpvasViTa4TgFFWH2ROJ7M9g0lPqJy+YrhrHcY9mqV5TVjTheQp0JeckrgO2B39XngPMAMMdne3rWGpf0Pfbj3FLfchMk6XYDXSZzCS2CmSeRA4aBMb+4R3YurixyJLrnGRMH0=</D></RSAKeyValue>");
        RSACryptoServiceProvider publicKey = new RSACryptoServiceProvider();
        publicKey.FromXmlString("<RSAKeyValue><Modulus>wL8s+C8SnnlaaqR+VsyijmxOJOARNa4o7ZNsqfy3+9J9Ol2JNSjjMfQWoUnFtClzJBlZhU5KtuazQe8ZKXTX9YvKoJdRhlsonZkC04qiTMdO/FZIH00GrCRxeQ7XDnQnvPB9Bdsvs//7zrY3f7eLIkpIyK9cQHU+5jjJd5IT0eE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>");

        {
            string text = "foo";
            byte[] encrypted = publicKey.Encrypt(Encoding.UTF8.GetBytes(text), false);
            byte[] decryptedBytes = privateKey.Decrypt(encrypted, false);
        }

Можете ли вы дважды проверить, что экспортированный закрытый ключ от cert.PrivateKey, а открытый ключ от cert.PublicKey.Key?

4
ответ дан 6 December 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: