Что такое обновленная версия SetPinForPrivateKey в .NET 6? ⇐ C#
Что такое обновленная версия SetPinForPrivateKey в .NET 6?
Мне нужно установить PIN-код для смарт-карты. Я использовал метод расширения, указанный ниже, в .NET Framework 4.8. Затем я решил обновить свое приложение, используя .NET 6, и застрял. Проблема в том, что строка:
Ключ RSACryptoServiceProvider = (RSACryptoServiceProvider)certificate.PrivateKey; В .NET 6 тип возвращаемого значения certificate.PrivateKey — System.Security.Cryptography.RSACng, и этот метод устарел. Я обнаружил, что в .NET 6 есть метод certificate.GetRSAPrivateKey(). но тип возвращаемого значения – RSA.
Есть ли обновленный код для .NET 6 или можно ли преобразовать RSACng в RSACryptoServiceProvider?
с использованием System.Security.Cryptography; использование System.Security.Cryptography.X509Certificates; использование System.Text; пространство имен X509CertExtension { внутренний статический класс X509Certificate2Extension { public static bool SetPinForPrivateKey (этот сертификат X509Certificate2, строковый PIN-код) { логический флаг = ложь; пытаться { // Здесь у меня ошибка в .NET 6 // System.InvalidCastException: 'Невозможно привести объект типа 'System.Security.Cryptography.RSACng' к типу 'System.Security.Cryptography.RSACryptoServiceProvider'.' Ключ RSACryptoServiceProvider = (RSACryptoServiceProvider)certificate.PrivateKey; IntPtr провайдерХандле = IntPtr.Zero; byte[] pinBuffer = Encoding.ASCII.GetBytes(pin); SafeNativeMethods.Execute((Func)(() => SafeNativeMethods.CryptAcquireContext(refProviderHandle, key.CspKeyContainerInfo.KeyContainerName, key.CspKeyContainerInfo.ProviderName, key.CspKeyContainerInfo.ProviderType, SafeNativeMethods.CryptContextFlags.Silent))); SafeNativeMethods.Execute((Func)(() => SafeNativeMethods.CryptSetProvParam(providerHandle, SafeNativeMethods.CryptParameter.KeyExchangePin, pinBuffer, 0U))); SafeNativeMethods.Execute((Func)(() => SafeNativeMethods.CertSetCertificateContextProperty(certificate.Handle, SafeNativeMethods.CertificateProperty.CryptoProviderHandle, 0U,ProviderHandle))); флаг = правда; } поймать (Исключение ex) { } флаг возврата; } } }
Мне нужно установить PIN-код для смарт-карты. Я использовал метод расширения, указанный ниже, в .NET Framework 4.8. Затем я решил обновить свое приложение, используя .NET 6, и застрял. Проблема в том, что строка:
Ключ RSACryptoServiceProvider = (RSACryptoServiceProvider)certificate.PrivateKey; В .NET 6 тип возвращаемого значения certificate.PrivateKey — System.Security.Cryptography.RSACng, и этот метод устарел. Я обнаружил, что в .NET 6 есть метод certificate.GetRSAPrivateKey(). но тип возвращаемого значения – RSA.
Есть ли обновленный код для .NET 6 или можно ли преобразовать RSACng в RSACryptoServiceProvider?
с использованием System.Security.Cryptography; использование System.Security.Cryptography.X509Certificates; использование System.Text; пространство имен X509CertExtension { внутренний статический класс X509Certificate2Extension { public static bool SetPinForPrivateKey (этот сертификат X509Certificate2, строковый PIN-код) { логический флаг = ложь; пытаться { // Здесь у меня ошибка в .NET 6 // System.InvalidCastException: 'Невозможно привести объект типа 'System.Security.Cryptography.RSACng' к типу 'System.Security.Cryptography.RSACryptoServiceProvider'.' Ключ RSACryptoServiceProvider = (RSACryptoServiceProvider)certificate.PrivateKey; IntPtr провайдерХандле = IntPtr.Zero; byte[] pinBuffer = Encoding.ASCII.GetBytes(pin); SafeNativeMethods.Execute((Func)(() => SafeNativeMethods.CryptAcquireContext(refProviderHandle, key.CspKeyContainerInfo.KeyContainerName, key.CspKeyContainerInfo.ProviderName, key.CspKeyContainerInfo.ProviderType, SafeNativeMethods.CryptContextFlags.Silent))); SafeNativeMethods.Execute((Func)(() => SafeNativeMethods.CryptSetProvParam(providerHandle, SafeNativeMethods.CryptParameter.KeyExchangePin, pinBuffer, 0U))); SafeNativeMethods.Execute((Func)(() => SafeNativeMethods.CertSetCertificateContextProperty(certificate.Handle, SafeNativeMethods.CertificateProperty.CryptoProviderHandle, 0U,ProviderHandle))); флаг = правда; } поймать (Исключение ex) { } флаг возврата; } } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Обновленная ActiveMQ Classic до 5.18.6, log4j.properties не обрабатывается
Anonymous » » в форуме JAVA - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-