PureBasic
PureBasic
RSA Encrypt Randomly Generated AES Key
See more RSA Examples
Demonstrates how to RSA encrypt a randomly generated AES key.Chilkat PureBasic Downloads
IncludeFile "CkBinData.pb"
IncludeFile "CkCert.pb"
IncludeFile "CkRsa.pb"
IncludeFile "CkPrng.pb"
IncludeFile "CkPublicKey.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
; First generate a 256-bit AES key (32 bytes).
prng.i = CkPrng::ckCreate()
If prng.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
bdAesKey.i = CkBinData::ckCreate()
If bdAesKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkPrng::ckGenRandomBd(prng,32,bdAesKey)
; Use a public key from a certificate for RSA encryption.
cert.i = CkCert::ckCreate()
If cert.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkCert::ckLoadFromFile(cert,"qa_data/pem/mf_public_rsa.pem")
If success = 0
Debug CkCert::ckLastErrorText(cert)
CkPrng::ckDispose(prng)
CkBinData::ckDispose(bdAesKey)
CkCert::ckDispose(cert)
ProcedureReturn
EndIf
pubKey.i = CkPublicKey::ckCreate()
If pubKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkCert::ckGetPublicKey(cert,pubKey)
rsa.i = CkRsa::ckCreate()
If rsa.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkRsa::ckUsePublicKey(rsa,pubKey)
If success = 0
Debug CkRsa::ckLastErrorText(rsa)
CkPrng::ckDispose(prng)
CkBinData::ckDispose(bdAesKey)
CkCert::ckDispose(cert)
CkPublicKey::ckDispose(pubKey)
CkRsa::ckDispose(rsa)
ProcedureReturn
EndIf
; RSA encrypt our 32-byte AES key.
; The contents of bdAesKey are replaced with result of the RSA encryption.
success = CkRsa::ckEncryptBd(rsa,bdAesKey,0)
If success = 0
Debug CkRsa::ckLastErrorText(rsa)
CkPrng::ckDispose(prng)
CkBinData::ckDispose(bdAesKey)
CkCert::ckDispose(cert)
CkPublicKey::ckDispose(pubKey)
CkRsa::ckDispose(rsa)
ProcedureReturn
EndIf
; Return the result as a base64 string
encryptedAesKey.s = CkBinData::ckGetEncoded(bdAesKey,"base64")
Debug "encrypted AES key = " + encryptedAesKey
CkPrng::ckDispose(prng)
CkBinData::ckDispose(bdAesKey)
CkCert::ckDispose(cert)
CkPublicKey::ckDispose(pubKey)
CkRsa::ckDispose(rsa)
ProcedureReturn
EndProcedure