Anatoly Lubarsky Logo
programming, design, integration, games, music

Use RSACryptoServiceProvider Instead of RSA for Asymmetric Encryption

RSACryptoServiceProvider inherits from RSA under System.Security.Cryptography and used for asymmetric encryption and decryption purposes in .NET Framework. RSA inherits from AsymmetricAlgorithm.


In order to use either of them need to create RSA instance. It is possible either via RSA.Create method or using RSACryptoProvider constructor. I advice to use RSACryptoProvider constructor method.


Performance

Let's look closely at RSA.Create method. Since RSA is an abstract class we cannot use its constructor directly but need to call for RSA.Create in order to get RSA instance. RSA.Create calls for CryptoConfig.CreateFromName method passing string parameter ("System.Security.Cryptography.RSA"). CreateFromName uses Reflection to create instance. So performance sucks. Actually RSA.Create is 2 times more expensive than RSACryptoProvider constructor. Relevant lines from Log 10 Costs file by Rico Mariani:


System.Security.Cryptography.RSA.Create 3.8
System.Security.Cryptography.RSACryptoServiceProvider.#ctor 1.9

Impersonation

Using RSACryptoProvider (instead of using RSA directly) is a more flexible way to operate when running on limited security environment. For example - RSA uses private and public keys stored in the user profile of the calling user. Since user profile is not loaded in ASP.NET for performance reasons - RSA will throw runtime exceptions when impersonating or running Application Pool under an account whose user profile is not loaded.


In this case set the static UseMachineKeyStore property to use the machine key store instead of the user profile key store. All code in the current application domain will use this setting.


RSACryptoServiceProvider.UseMachineKeyStore = true;

Hope, this was useful...


Related Posts:

Friday, March 02, 2007 4:15 AM

Login

Subscribe via RSS

Article Categories

.Net Framework
ASP.NET Tips
C# Win32 API
HTML, CSS, Web
Javascript Tips
MSSQL Tips
System
System.Net
WebServices

Archives

(02) January, 2018
(01) June, 2013
(03) March, 2013
(02) February, 2013
(01) July, 2012
(01) April, 2012
(01) September, 2011
(01) August, 2011
(03) May, 2011
(01) March, 2011
(02) December, 2010
(01) November, 2010
(01) October, 2010
(01) June, 2010
(01) May, 2010
(02) March, 2010
(01) January, 2010
(02) December, 2009
(03) September, 2009
(03) August, 2009
(09) July, 2009
(04) June, 2009
(03) May, 2009
(02) April, 2009
(03) March, 2009
(02) February, 2009
(02) January, 2009
(05) December, 2008
(04) November, 2008
(06) October, 2008
(04) September, 2008
(07) August, 2008
(04) July, 2008
(05) June, 2008
(07) May, 2008
(05) April, 2008
(03) March, 2008
(02) February, 2008
(03) January, 2008
(03) December, 2007
(05) November, 2007
(05) October, 2007
(07) September, 2007
(13) August, 2007
(11) July, 2007
(14) June, 2007
(16) May, 2007
(14) April, 2007
(10) March, 2007
(14) February, 2007
(20) January, 2007
(15) December, 2006
(12) November, 2006
(11) October, 2006
(13) September, 2006
(13) August, 2006
(12) July, 2006
(11) June, 2006
(12) May, 2006
(22) April, 2006
(30) March, 2006
(13) February, 2006
(14) January, 2006
(19) December, 2005
(17) November, 2005
(17) October, 2005
(17) September, 2005
(12) August, 2005
(14) July, 2005
(09) June, 2005
(15) May, 2005
(12) April, 2005
(21) March, 2005
(11) February, 2005
(12) January, 2005
(19) December, 2004
(13) November, 2004
(12) October, 2004
(15) September, 2004
(09) August, 2004
(25) July, 2004
(23) June, 2004
(31) May, 2004
(21) April, 2004
(16) March, 2004
(09) February, 2004
(06) January, 2004
(02) December, 2003
(01) November, 2003

Post Categories

.Net and C#
Android
Antispam
App. Development
Architecture
ASP.NET
Blogging
Deprecated Projects
Facebook Platform
Fun
Google
iOS
Javascript
Misc.
MSSQL
Music
My Games
Performance
Roller
Social Networks
Tools
Visual Studio
Web 2.0
WebServices

About Me

linkedin Profile
Recs
Who am I

My Sites

Billy Beet
x2line blogs