lua加密

本文介绍了如何使用OpenResty的Lua实现AES-128-CBC加密,以满足与Java解密的对接需求。通过修改lua-lockbox库中的PKCS7Padding实现与Java PKCS5Padding的兼容,并提供了加密函数示例。
摘要由CSDN通过智能技术生成

1、需求
openresty实现参数加密并转发,加密方式AES,128,CBC模式。需要和java的解密对接。
2、加密包
采用https://github.com/somesocks/lua-lockbox
由于java的补位采用PKCS5Padding,而lua的补位采用PKCS7Padding。因此此时lua的加密数据无法采用java解密。参考文章https://www.jianshu.com/p/c49b9768a6e9
将lua-lockbox/lockbox/padding/pkcs7.lua中的local paddingCount = 
blockSize - ((byteCount -1) % blockSize) + 1;改为local paddingCount = blockSize - (byteCount % blockSize);
将修改好的lockbox文件夹拷贝到/usr/local/openresty/lualib下
3、lua加密
-- 拼接函数
function mergeTables(...)
  local tabs = {...}
  if not tabs then
    return {}
  end
  local origin = tabs[1]
  for i = 2,#tabs do
    if origin then
      if tabs[i] then
        for k,v in pairs(tabs[i]) do
          table.insert(origin,v)
        end
      end
    else
      origin = tabs[i]
    end
  end
  return origin

好的,以下是一个使用LuaSec库实现AES加密的示例代码: ```lua local aes = require("openssl.aes") -- 加密函数 function encrypt(key, data) -- 将key转换为128位的二进制数据 local key_bin = aes.digest("md5", key) -- 创建AES加密对象 local cipher = aes.new(key_bin, "CBC") -- 对数据进行PKCS7填充 data = cipher:pad(data, 16) -- 加密数据 local encrypted_data = cipher:encrypt(data) -- 返回加密后的数据 return encrypted_data end -- 解密函数 function decrypt(key, encrypted_data) -- 将key转换为128位的二进制数据 local key_bin = aes.digest("md5", key) -- 创建AES加密对象 local cipher = aes.new(key_bin, "CBC") -- 解密数据 local decrypted_data = cipher:decrypt(encrypted_data) -- 去除PKCS7填充 decrypted_data = cipher:unpad(decrypted_data) -- 返回解密后的数据 return decrypted_data end -- 测试代码 local key = "my_secret_key" local data = "Hello, world!" local encrypted_data = encrypt(key, data) print("加密后的数据:", encrypted_data) local decrypted_data = decrypt(key, encrypted_data) print("解密后的数据:", decrypted_data) ``` 这段代码使用了LuaSec库中的AES加密算法实现了加密和解密功能,其中encrypt函数用于加密数据,decrypt函数用于解密数据。加密过程中使用了CBC模式和PKCS7填充,解密过程中先解密数据,再去除PKCS7填充。在测试代码中,我们使用了一个字符串作为加密的数据,可以根据自己的需求修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值