Sample code for 30+ languages & platforms
PureBasic

RSA Encrypt and Decrypt Strings

See more RSA Examples

_LANGUAGE_ sample code to RSA public-key encrypt and decrypt strings using public and private keys.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkPublicKey.pb"
IncludeFile "CkPrivateKey.pb"
IncludeFile "CkRsa.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example assumes the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    rsa.i = CkRsa::ckCreate()
    If rsa.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; This example also generates the public and private
    ; keys to be used in the RSA encryption.
    ; Normally, you would generate a key pair once,
    ; and distribute the public key to your partner.
    ; Anything encrypted with the public key can be
    ; decrypted with the private key.  The reverse is 
    ; also true: anything encrypted using the private
    ; key can be decrypted using the public key.

    ; Generate a 2048-bit key.  Chilkat RSA supports
    ; key sizes ranging from 512 bits to 4096 bits.
    privKey.i = CkPrivateKey::ckCreate()
    If privKey.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkRsa::ckGenKey(rsa,2048,privKey)
    If success = 0
        Debug CkRsa::ckLastErrorText(rsa)
        CkRsa::ckDispose(rsa)
        CkPrivateKey::ckDispose(privKey)
        ProcedureReturn
    EndIf

    pubKey.i = CkPublicKey::ckCreate()
    If pubKey.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkPrivateKey::ckToPublicKey(privKey,pubKey)

    plainText.s = "Encrypting and decrypting should be easy!"

    ; Start with a new RSA object to demonstrate that all we
    ; need are the keys previously exported:
    rsaEncryptor.i = CkRsa::ckCreate()
    If rsaEncryptor.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Encrypted output is always binary.  In this case, we want
    ; to encode the encrypted bytes in a printable string.
    ; Our choices are "hex", "base64", "url", "quoted-printable".
    CkRsa::setCkEncodingMode(rsaEncryptor, "hex")

    ; We'll encrypt with the public key and decrypt with the private
    ; key.
    success = CkRsa::ckUsePublicKey(rsaEncryptor,pubKey)

    usePrivateKey.i = 0
    encryptedStr.s = CkRsa::ckEncryptStringENC(rsaEncryptor,plainText,usePrivateKey)
    Debug encryptedStr

    ; Now decrypt:
    rsaDecryptor.i = CkRsa::ckCreate()
    If rsaDecryptor.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkRsa::setCkEncodingMode(rsaDecryptor, "hex")
    success = CkRsa::ckUsePrivateKey(rsaDecryptor,privKey)

    usePrivateKey = 1
    decryptedStr.s = CkRsa::ckDecryptStringENC(rsaDecryptor,encryptedStr,usePrivateKey)

    Debug decryptedStr


    CkRsa::ckDispose(rsa)
    CkPrivateKey::ckDispose(privKey)
    CkPublicKey::ckDispose(pubKey)
    CkRsa::ckDispose(rsaEncryptor)
    CkRsa::ckDispose(rsaDecryptor)


    ProcedureReturn
EndProcedure