RSA keys are asymmetric keys and consists of public and private key both combined forming a key pair.
The namespace DidiSoft.OpeSsl.Rsa contains PublicKey and PrivateKey subclasses that represent RSA keys:
Namespace DidiSoft.OpenSsl +---------+ +---------+ +----------+ | KeyPair | |PublicKey| |PrivateKey| ++--------+ +-------+-+ +-----+----+ ^ ^ ^ | DidiSoft.OpenSsl.Rsa | | +-+---------+ +-------+----+ +-----+-------+ |RsaKeyPair | |RsaPublicKey| |RsaPrivateKey| +-----------+ +------------+ +-------------+
Table of contents
Create RSA keys
RSA keys are created as a key pair. Then from the key pair the public and private key can be taken and used for a cryptographic operation or saved to a file or other storage.
The easiest way to create an RSA key pair is with the method GenerateKeyPair provided in DidiSoft.OpenSsl.RsaKeyPair:
1 2 3 | DidiSoft.OpenSsl.Rsa.RsaKeyPair kp = DidiSoft.OpenSsl.Rsa.RsaKeyPair.GenerateKeyPair(KeyLength.Length2048); RsaPublicKey pubKey = kp.GetPublicKey(); RsaPrivateKey privKey = kp.GetPrivateKey(); |
Loading RSA keys
An RSA public key can be loaded from a file or byte array with the static Load method:
1 | DidiSoft.OpenSsl.Rsa.RsaPublicKey pubKey = DidiSoft.OpenSsl.Rsa.RsaPublicKey.Load("akey.pem"); |
A private RSA key can be loaded from an unprotected source or from password-protected storage (encrypted private key)
1 2 | DidiSoft.OpenSsl.Rsa.RsaPrivateKey privKey = DidiSoft.OpenSsl.Rsa.RsaPrivateKey.Load("seckey.pem"); DidiSoft.OpenSsl.Rsa.RsaPrivateKey priv2Key = DidiSoft.OpenSsl.Rsa.RsaPrivateKey.Load("protected.key", "key password"); |
Save RSA keys
The public and private keys can be stored in PEM or DER format specified as a last parameter of the Save method:
1 2 3 4 5 6 7 8 9 | using DidiSoft.OpenSsl.Rsa; ... RsaKeyPair kp = RsaKeyPair.GenerateRsaKeyPair(KeyLength.Length2048); RsaPublicKey pubKey = kp.GetPublicKey(); RsaPrivateKey privKey = kp.GetPrivateKey(); bool pemFormat = true; pubKey.Save(@"Data\public_key.pem", pemFormat); privKey.Save(@"Data\private_key.pem", pemFormat); |
Base-64 encoded format
Some applications use RSA keys in the base-64 encoded format. For such cases, the keys can be exported with the ToBase64String method.
Obtain public key from private key
A public RSA key can be restored from the private key with the following code block:
1 2 | RsaPrivateKey privKey = ... RsaPublicKey pubKey = (RsaPublicKey)privKey.GetPublicKey(); |
Key usage
RSA keys can be used for cryptography operations with the OpenSslRsa class.
See also
X.509 Certificates
CMS/PKCS7 cryptography operations
S/MIME cryptography operations