This page gives code samples showing how to pass an RSA key as a string instead of using a filename when using CryptoSys PKI.
Question. When signing with RSA I want to avoid having to use my key file and work directly in memory. How do I do that?Answer. Pass the RSA key as a PEM string. This page gives some code showing how to do that.
We need to do a one-off operation to save your existing key in PEM format, then you can use a normal text editor to edit the key for your subsequent code.
' Requires both `basCrPKIWrappers.bas` and `basCrPKI.bas` in the project
''' How to save an existing private key in PEM format
Public Sub SaveRsaKeyAsPem()
    Dim strPrivateKey As String
    Dim strNewFileName As String
    Dim nRet As Long
    ' A one-off operation
    ' Read in private key from file
    strPrivateKey = rsaReadAnyPrivateKey("AlicePrivRSASign.p8e", "password")
    Debug.Assert Len(strPrivateKey) > 0
    ' Now save in PEM format (textual)
    strNewFileName = "AliceRSA.pem"
    nRet = RSA_SaveEncPrivateKey(strNewFileName, strPrivateKey, 5000, "password", PKI_KEY_FORMAT_PEM)
    Debug.Assert nRet = 0
    Debug.Print "Saved new file " & strNewFileName
    ' Now edit this file with a text editor to copy the PEM string
End Sub
Alice.pem-----BEGIN ENCRYPTED PRIVATE KEY----- MIICojAcBgoqhkiG9w0BDAEDMA4ECFGCy5qfZqLaAgITiASCAoC+1K2nuPH2CX8/ Zc0VSVHO6wdKM18QCN2K3op7K8OMhflx7HM3h+XMvGz1PWU7O6GPKhdzkjhAfDyZ 2uKqz4E3D5q3mleCJXtizs27C3OT20NWaciecLPIWzjGBAa6M8XRzi7uvpwGO0NF GCsst7PB5LH1QxuA7m+H8ZuqWcGtZgRgt3GanSsrFB9zxxKQS6b3KGq46Tg+MrNd BTdyXWwRx7MY1aUz8AE8em08edsapgGfjt8A/atB4i5s5/vfcpaMh4ndALTRBb3t pnqMOYjP3FFC719xnzJ8OtNdS9/cQ9V08pIEFrD3Jb9K7qEq8EKOi4PgIrRBRtC4 O4iA/OB+x6x3WRbUVkpvqp0YlMREtuF8xSLhX3NevEdFP8SWMqrqUb2j0i3fnBM/ xBIUv+nhdYx4yeXWXhfCN0Ic0kwFVTs1VvEmxxloERkpmDENDU6JOYrQ5AX3Ippv KYBTjmoPVljU6iETcUUXto0jgSXwy3+GmxF/kdgb8Nlhj9A3uInA20N9iLKVFI3B TeRxPet6uF2W/+14LApFrsgOg5ClfxpRbhTFNuydcxihoje2Evvh0rYpu1eiReEU UEMJRSLrY9ZFDHKRWnJGcoxrUrFvCd0dGkH48jcTzb/cQ+DwRLtGJI2zyZ1bJ3Jq vs9WPiBSm3DRUWK4VCgrufWLvl/KyLAZgEiYajZnQt1iN1VcfSURxtL+ZQG5tc7A QE9mBC4UFSMuY2DAjmEg9PEEB2SWgk8QtliAEnYQljD+vroWe0dCV0S8iEzRlQ/B Y9A5uYltcK1gweyvbbWhvIgfbCxjx6l6Zf3lIDe7R5UBCpPCgghOtZmVOh/fTrNB F3j0h5Oq -----END ENCRYPTED PRIVATE KEY-----See the examples below on how to use this as a string.
StringBuilder sbPrivateKey = Rsa.ReadPrivateKey("AlicePrivRSASign.p8e", "password");
int n = Rsa.SaveEncPrivateKey("AliceRSA1.pem", sbPrivateKey.ToString(), 5000, "password", 0, Rsa.Format.PEM);
The following examples in VBA/VB6 and C# show how to sign the string "<doc>sign me<doc>"
using the above RSA key passed as a hardcoded PEM string.
Public Sub MakeSigWithPemKey()
    Dim strSig64 As String
    Dim abData() As Byte
    Dim strPK As String
    ' Store private key in PEM format
    ' Hint: to avoid error "Too many line continuations", do this...
    strPK = ""
    strPK = strPK & "-----BEGIN ENCRYPTED PRIVATE KEY-----"
    strPK = strPK & "MIICojAcBgoqhkiG9w0BDAEDMA4ECFGCy5qfZqLaAgITiASCAoC+1K2nuPH2CX8/"
    strPK = strPK & "Zc0VSVHO6wdKM18QCN2K3op7K8OMhflx7HM3h+XMvGz1PWU7O6GPKhdzkjhAfDyZ"
    strPK = strPK & "2uKqz4E3D5q3mleCJXtizs27C3OT20NWaciecLPIWzjGBAa6M8XRzi7uvpwGO0NF"
    strPK = strPK & "GCsst7PB5LH1QxuA7m+H8ZuqWcGtZgRgt3GanSsrFB9zxxKQS6b3KGq46Tg+MrNd"
    strPK = strPK & "BTdyXWwRx7MY1aUz8AE8em08edsapgGfjt8A/atB4i5s5/vfcpaMh4ndALTRBb3t"
    strPK = strPK & "pnqMOYjP3FFC719xnzJ8OtNdS9/cQ9V08pIEFrD3Jb9K7qEq8EKOi4PgIrRBRtC4"
    strPK = strPK & "O4iA/OB+x6x3WRbUVkpvqp0YlMREtuF8xSLhX3NevEdFP8SWMqrqUb2j0i3fnBM/"
    strPK = strPK & "xBIUv+nhdYx4yeXWXhfCN0Ic0kwFVTs1VvEmxxloERkpmDENDU6JOYrQ5AX3Ippv"
    strPK = strPK & "KYBTjmoPVljU6iETcUUXto0jgSXwy3+GmxF/kdgb8Nlhj9A3uInA20N9iLKVFI3B"
    strPK = strPK & "TeRxPet6uF2W/+14LApFrsgOg5ClfxpRbhTFNuydcxihoje2Evvh0rYpu1eiReEU"
    strPK = strPK & "UEMJRSLrY9ZFDHKRWnJGcoxrUrFvCd0dGkH48jcTzb/cQ+DwRLtGJI2zyZ1bJ3Jq"
    strPK = strPK & "vs9WPiBSm3DRUWK4VCgrufWLvl/KyLAZgEiYajZnQt1iN1VcfSURxtL+ZQG5tc7A"
    strPK = strPK & "QE9mBC4UFSMuY2DAjmEg9PEEB2SWgk8QtliAEnYQljD+vroWe0dCV0S8iEzRlQ/B"
    strPK = strPK & "Y9A5uYltcK1gweyvbbWhvIgfbCxjx6l6Zf3lIDe7R5UBCpPCgghOtZmVOh/fTrNB"
    strPK = strPK & "F3j0h5Oq"
    strPK = strPK & "-----END ENCRYPTED PRIVATE KEY-----"
    ' Now sign some data (first first encode Unicode string as bytes)
    abData = StrConv("<doc>sign me<doc>", vbFromUnicode)
    strSig64 = sigSignData(abData, strPK, "password", "sha256WithRSAEncryption")
    Debug.Print strSig64
End Sub
string pk = "-----BEGIN ENCRYPTED PRIVATE KEY-----" +
	"MIICojAcBgoqhkiG9w0BDAEDMA4ECFGCy5qfZqLaAgITiASCAoC+1K2nuPH2CX8/" +
	"Zc0VSVHO6wdKM18QCN2K3op7K8OMhflx7HM3h+XMvGz1PWU7O6GPKhdzkjhAfDyZ" +
	"2uKqz4E3D5q3mleCJXtizs27C3OT20NWaciecLPIWzjGBAa6M8XRzi7uvpwGO0NF" +
	"GCsst7PB5LH1QxuA7m+H8ZuqWcGtZgRgt3GanSsrFB9zxxKQS6b3KGq46Tg+MrNd" +
	"BTdyXWwRx7MY1aUz8AE8em08edsapgGfjt8A/atB4i5s5/vfcpaMh4ndALTRBb3t" +
	"pnqMOYjP3FFC719xnzJ8OtNdS9/cQ9V08pIEFrD3Jb9K7qEq8EKOi4PgIrRBRtC4" +
	"O4iA/OB+x6x3WRbUVkpvqp0YlMREtuF8xSLhX3NevEdFP8SWMqrqUb2j0i3fnBM/" +
	"xBIUv+nhdYx4yeXWXhfCN0Ic0kwFVTs1VvEmxxloERkpmDENDU6JOYrQ5AX3Ippv" +
	"KYBTjmoPVljU6iETcUUXto0jgSXwy3+GmxF/kdgb8Nlhj9A3uInA20N9iLKVFI3B" +
	"TeRxPet6uF2W/+14LApFrsgOg5ClfxpRbhTFNuydcxihoje2Evvh0rYpu1eiReEU" +
	"UEMJRSLrY9ZFDHKRWnJGcoxrUrFvCd0dGkH48jcTzb/cQ+DwRLtGJI2zyZ1bJ3Jq" +
	"vs9WPiBSm3DRUWK4VCgrufWLvl/KyLAZgEiYajZnQt1iN1VcfSURxtL+ZQG5tc7A" +
	"QE9mBC4UFSMuY2DAjmEg9PEEB2SWgk8QtliAEnYQljD+vroWe0dCV0S8iEzRlQ/B" +
	"Y9A5uYltcK1gweyvbbWhvIgfbCxjx6l6Zf3lIDe7R5UBCpPCgghOtZmVOh/fTrNB" +
	"F3j0h5Oq" +
	"-----END ENCRYPTED PRIVATE KEY-----";
byte[] data = System.Text.Encoding.Default.GetBytes("<doc>sign me<doc>");
string sig64 = Sig.SignData(data, pk, "password", SigAlgorithm.Rsa_Sha256);
Console.WriteLine(sig64);
In the above examples we used an encrypted RSA key. You can also do the same for an unencrypted key (PrivateKeyInfo) and a public key. The CryptoSys PKI functions will accept any of the alternative formats obtained below.
nRet = RSA_SavePrivateKeyInfo(strNewFileName, strPrivateKey, PKI_KEY_FORMAT_PEM)
n = Rsa.SavePrivateKeyInfo("AliceRSA1.p8", sbPrivateKey.ToString(), Rsa.Format.PEM);
-----BEGIN PRIVATE KEY----- -----END PRIVATE KEY-----If you need the OpenSSL private key format, use the option
PKI_KEY_FORMAT_SSL/Rsa.Format.SSL
-----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
strPublicKey = rsaReadAnyPublicKey("AliceRSASignByCarl.cer") nRet = RSA_SavePublicKey(strNewFileName, strPublicKey, PKI_KEY_FORMAT_PEM)
string strPubKey = Rsa.ReadPublicKey("AliceRSASignByCarl.cer").ToString(); n = Rsa.SavePublicKey("AliceRSAPub.p1", strPubKey, Rsa.Format.PEM);
-----BEGIN RSA PUBLIC KEY----- -----END RSA PUBLIC KEY-----If you need the OpenSSL public key format, use the option
PKI_KEY_FORMAT_SSL/Rsa.Format.SSL
-----BEGIN PUBLIC KEY----- -----END PUBLIC KEY-----
To contact us or comment on this page, please send us a message.
This page last updated 10 September 2025