因为python的AES加密结果和Go的加密结果总是对不上,最终只能让开发提供一个Go的加密库,用python来调用,保证加密结果是一样的。
Go生成动态库的的搞法开发知道,就不写啦,windows动态库是.dll,Linux是.so,不管哪种,python调用方式是一样的
此处仅记录python 调用方式:
Go 动态库接收和返回的其实是C_type格式,所以python调用也需要转换为相应的C_type格式,可参照此表转换
if __name__ == "__main__": lib = cdll.LoadLibrary("C:\Users\ws\Downloads\skm-share-codec.dll") lib.aes_encrypt.argtypes = [ctypes.c_char_p, ctypes.c_int] # 参数格式转换 lib.aes_encrypt.restype = ctypes.c_char_p # 返回值格式转换 token_dict = { "inviteeType": 1, "invitee": "licong@163.com", "resourceType": 4, "resourceId": 433, "shareType": 7, "expireAt": 1666253258 } data = json.dumps(token_dict) # 开发告知接收的是序列号的cha数组 charArray = bytes(data.encode('utf-8')) # c_type Char数组对应python 的bytes aa = lib.aes_encrypt(charArray, len(charArray)) print(type(aa)) print(aa) print(aa.decode("utf-8").split(","))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)