添加cfadmin
直接上cfadmin项目地址,目前我只需要里面的加密库,将里面的lcrypt文件夹复制出来放到skynet项目的3rd文件夹
编译
编辑lcrypt.h文件,原代码如下
#include <core.h>
#include <openssl/ripemd.h>
#include <openssl/rc4.h>
#include <openssl/md4.h>
#include <openssl/md5.h>
#include <openssl/sha.h>
#include <openssl/pem.h>
#include <openssl/rsa.h>
#include <openssl/hmac.h>
#include <openssl/rand.h>
改成下面
#include <lua.h>
#include <lauxlib.h>
#include <string.h>
#include <openssl/ripemd.h>
#include <openssl/rc4.h>
#include <openssl/md4.h>
#include <openssl/md5.h>
#include <openssl/sha.h>
#include <openssl/pem.h>
#include <openssl/rsa.h>
#include <openssl/hmac.h>
#include <openssl/rand.h>
makefile的修改
LUA_CLIB中添加
lcrypt
(
TLS_LIB=/usr/local/openssl-1.1.1q/lib
TLS_INC=/usr/local/openssl-1.1.1q/include
openssl我指定了路径,因为是新安装的,安装教程可百度
)
下面添加两行
$(LUA_CLIB_PATH)/lcrypt.so : 3rd/lcrypt/lcrypt.c 3rd/lcrypt/aes.c 3rd/lcrypt/des.c 3rd/lcrypt/dh.c 3rd/lcrypt/rsa.c 3rd/lcrypt/sha.c 3rd/lcrypt/hmac.c 3rd/lcrypt/hmac_ex.c 3rd/lcrypt/b64.c 3rd/lcrypt/crc.c 3rd/lcrypt/url.c 3rd/lcrypt/hex.c 3rd/lcrypt/uuid.c 3rd/lcrypt/sm.c 3rd/lcrypt/rc.c | $(LUA_CLIB_PATH)$(CC) $(CFLAGS) $(SHARED) -I3rd/lcrypt -L$(TLS_LIB) -I$(TLS_INC) $^ -o $@ -lssl
重新编译,生成lcrypt.so文件,搞定
使用
复制cfadmin中的lualib/crypt文件夹到自己项目,例如放在 cfadmin/crypt文件夹
将里面的init文件改动一下
require “crypt.xx” 均改成
require “cfadmin.crypt.xx”
(因为我原项目有crypt,不改会造成读取文件错乱)
微信下单加密
下单使用的是sha256 with rsa加密
local cfadmin_crypt = require "cfadmin.crypt"
local header_sign = cfadmin_crypt.rsa_sign(header_sign_str,wechat_pay_v3_apiclient_pem_data,"sha256")
--客户端的加密
order.sign = cfadmin_crypt.rsa_sign(client_sign_str,wechat_pay_v3_apiclient_pem_data,"sha256")
参数header_sign_str和client_sign_str见上一篇文章微信V3支付,第二个参数可以放私钥的文件路径,也可以放文件内容
微信回调解密
回调使用的是aes-256-gcm解密
local c_ret = cfadmin_crypt.aes_256_gcm_decrypt(V3_key,crypt.base64decode(info.ciphertext),info.nonce,(info.associated_data or ""))