local ffi = require("ffi")
ffi.cdef[[
int __stdcall CryptBinaryToStringA(
const char *pbBinary,
int cbBinary,
int dwFlags,
char * pszString,
int *pcchString
);
int __stdcall CryptStringToBinaryA(
const char *pszString,
int cchString,
int dwFlags,
char *pbBinary,
int *pcbBinary,
int *pdwSkip,
int *pdwFlags
);
]]
local crypt = ffi.load(ffi.os == "Windows" and "crypt32")
local function toBase64(txt)
local buflen = ffi.new("int[1]")
crypt.CryptBinaryToStringA(txt, #txt, 1, nil, buflen)
local buf = ffi.new("char[?]", buflen[0])
crypt.CryptBinaryToStringA(txt, #txt, 1, buf, buflen)
return ffi.string(buf, buflen[0])
end
local function fromBase64(txt)
local buflen = ffi.new("int[1]")
crypt.CryptStringToBinaryA(txt, #txt, 1, nil, buflen, nil, nil)
local buf = ffi.new("char[?]", buflen[0])
crypt.CryptStringToBinaryA(txt, #txt, 1, buf, buflen, nil, nil)
return ffi.string(buf, buflen[0])
end
print(toBase64("hello world"))
print(fromBase64("aGVsbG8gd29ybGQ="))
luajit调用api函数实现base64编解码
最新推荐文章于 2022-06-13 11:13:00 发布