Lua Requires Chilkat v11.0.0+
Lua
RSA-OAEP with SHA256 hashing
See more RSA Examples
RSA encrypt a SHA256 hash with OAEP padding.Chilkat Lua Downloads
local chilkat = require("chilkat")
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
local pubkey = chilkat.PublicKey.new()
local sbPem = chilkat.StringBuilder.new()
local bCrlf = true
sbPem:append_line("-----BEGIN PUBLIC KEY-----", bCrlf)
sbPem:append_line("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA33TqqLR3eeUmDtHS89qF", bCrlf)
sbPem:append_line("3p4MP7Wfqt2Zjj3lZjLjjCGDvwr9cJNlNDiuKboODgUiT4ZdPWbOiMAfDcDzlOxA", bCrlf)
sbPem:append_line("04DDnEFGAf+kDQiNSe2ZtqC7bnIc8+KSG/qOGQIVaay4Ucr6ovDkykO5Hxn7OU7s", bCrlf)
sbPem:append_line("Jp9TP9H0JH8zMQA6YzijYH9LsupTerrY3U6zyihVEDXXOv08vBHk50BMFJbE9iwF", bCrlf)
sbPem:append_line("wnxCsU5+UZUZYw87Uu0n4LPFS9BT8tUIvAfnRXIEWCha3KbFWmdZQZlyrFw0buUE", bCrlf)
sbPem:append_line("f0YN3/Q0auBkdbDR/ES2PbgKTJdkjc/rEeM0TxvOUf7HuUNOhrtAVEN1D5uuxE1W", bCrlf)
sbPem:append_line("SwIDAQAB", bCrlf)
sbPem:append_line("-----END PUBLIC KEY-----", bCrlf)
-- Load the public key object from the PEM.
local success = pubkey:load_from_string(sbPem:get_as_string())
if not success then
print(pubkey.last_error_text)
return
end
-- Build a small string to encrypt
local json = chilkat.JsonObject.new()
json:update_string("example", "123")
json:update_string("hello", "world")
print(json:emit())
-- This is the JSON to be RSA encrypted: {"example":"123","hello":"world"}
-- IMPORTANT: RSA encryption is only used to encrypt small amounts of data.
-- RSA is only able to encrypt data to a maximum amount of your key size (2048 bits = 256 bytes)
-- minus padding / header data (11 bytes for PKCS#1 v1.5 padding, 42 bytes for OAEP).
-- As a result it is often not possible to encrypt files with RSA directly.
-- RSA is also not meant for this purpose.
--
-- If you want to encrypt more data, you can use something like:
-- 1) Generate a 256-bit random keystring K
-- 2) Encrypt your data with AES-CBC with K
-- 3) Encrypt K with RSA
-- 4) Send both to the other side
local rsa = chilkat.Rsa.new()
rsa.pkcs_padding = false
rsa.oaep_hash = "SHA-256"
rsa:use_public_key(pubkey)
rsa.encoding_mode = "base64"
-- Note: The OAEP padding uses random bytes in the padding, and therefore each time encryption happens,
-- even using the same data and key, the result will be different -- but still valid. One should not expect
-- to get the same output.
local bUsePrivateKey = false
local encryptedStr = rsa:encrypt_string_enc(json:emit(), bUsePrivateKey)
if not rsa.last_method_success then
print(rsa.last_error_text)
return
end
print("Result: " .. encryptedStr)