Sample code for 30+ languages & platforms
PureBasic

RSA Encrypt Randomly Generated AES Key

See more RSA Examples

Demonstrates how to RSA encrypt a randomly generated AES key.

Chilkat PureBasic Downloads

PureBasic
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