SQL Server
SQL Server
Generate an RSA Key and Save to Encrypted PEM
See more RSA Examples
Demonstrates how to generate an RSA key and save to an encrypted PEM file.Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
DECLARE @rsa int
EXEC @hr = sp_OACreate 'Chilkat.Rsa', @rsa OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
-- Generate a 2048-bit key.
DECLARE @privKey int
EXEC @hr = sp_OACreate 'Chilkat.PrivateKey', @privKey OUT
EXEC sp_OAMethod @rsa, 'GenKey', @success OUT, 2048, @privKey
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @rsa, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @rsa
EXEC @hr = sp_OADestroy @privKey
RETURN
END
DECLARE @password nvarchar(4000)
SELECT @password = 'secret'
-- Saving to a relative path (from the current working directory of the process).
DECLARE @path nvarchar(4000)
SELECT @path = 'rsaKeys/myTestRsaPrivate.pem'
-- Encrypt the PEM using 256-bit AES encryption.
EXEC sp_OASetProperty @privKey, 'Pkcs8EncryptAlg', 'aes256'
EXEC sp_OAMethod @privKey, 'SavePkcs8EncryptedPemFile', @success OUT, @password, @path
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @privKey, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @rsa
EXEC @hr = sp_OADestroy @privKey
RETURN
END
--
-- We can also save the public key.
-- There is no need to encrypt public keys.
DECLARE @pubKey int
EXEC @hr = sp_OACreate 'Chilkat.PublicKey', @pubKey OUT
EXEC sp_OAMethod @privKey, 'ToPublicKey', @success OUT, @pubKey
SELECT @path = 'rsaKeys/myTestRsaPublic.pem'
-- Choose PKCS1 or PKCS8
-- We'll choose PKCS8.
DECLARE @preferPkcs1 int
SELECT @preferPkcs1 = 0
EXEC sp_OAMethod @pubKey, 'SavePemFile', @success OUT, @preferPkcs1, @path
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @pubKey, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @rsa
EXEC @hr = sp_OADestroy @privKey
EXEC @hr = sp_OADestroy @pubKey
RETURN
END
--
PRINT 'Success.'
EXEC @hr = sp_OADestroy @rsa
EXEC @hr = sp_OADestroy @privKey
EXEC @hr = sp_OADestroy @pubKey
END
GO