local bc = require"bc"
function string2bc(s)
local x=bc.number(0)
for i=1,#s do
x=16*x+s:byte(i)
end
return x
end
public = "10001"
private = "816f0d36f0874f9f2a78acf5643acda3b59b9bcda66775b7720f57d8e9015536160e72"..
"8230ac529a6a3c935774ee0a2d8061ea3b11c63eed69c9f791c1f8f5145cecc722a220d2bc7516b6"..
"d05cbaf38d2ab473a3f07b82ec3fd4d04248d914626d2840b1bd337db3a5195e05828c9abf8de8da"..
"4702a7faa0e54955c3a01bf121"
modulus = "bfedeb9c79e1c6e425472a827baa66c1e89572bbfe91e84da94285ffd4c7972e1b9be3"..
"da762444516bb37573196e4bef082e5a664790a764dd546e0d167bde1856e9ce6b9dc9801e4713e3"..
"c8cb2f12459788a02d2e51ef37121a0f7b086784f0e35e76980403041c3e5e98dfa43ab9e6e85558"..
"c5dc00501b2f2a2959a11db21f"
url = "www.lua.org"
m = string2bc(url)
d = bc.number(public)
e = string2bc(private)
n = string2bc(modulus)
print("Message as big-integer:\n"..tostring(m))
x = bc.powmod(m,e,n)
print("\nEncrypted = \n"..tostring(x))
y =bc.powmod(x,d,n)
print("Decrypted Message = \n"..tostring(y))