4.3 KiB
循例设置,项目编译
循例,修改c++的版本,然后,设定编译路径,还有引用俩pri子工程
来到main主函数,引用的头文件,还有一个define宏定义,是用来生成加密文件的,这里设定是"qiuqiu"
设定FileIOWMIC命名空间,其中包含save保存函数,是以wmic的设备指纹,用来做加密的密钥,配合define宏定义SECRET_IV,生成加密文件WMIC.data即可;
还包含read函数,是解密和读取WMIC.data文件; 这里分别包含,debug和release两份数据;
在WMIC命名空间中,是把json数据体,完成组装和数据保存,再完成save和read相关的,逻辑调用
main主函数入口,在实例化测试窗口之前,先调用save和read测试
确认是Release版本,然后运行
窗体正常实例化,控制台打印,也是正常
可以看到,加密文件,创建也是正常的
然后,把这个data文件拷贝到,Unity.exe 游戏引擎,所在文件夹
回到dll.pro文件,先确认是include了WMIC和OpenSSL子项目
core头文件,先弄两个函数的重载,分别是success和error的回调
源文件,对应的重载函数,逻辑实现,是通过json数据体的传参data,传递给result结果; 需要注意的是,返回码,0代表成功,-1代表异常和失败;
需要对之前生成的加密数据,进行解析,引用对应的头文件,还有宏定义SECRET_IV,也对应上
Init初始化函数,获取WMIC.data加密文件,对应的目录路径,如果不存在,直接error返回即可,参考获取Qt应用程序路径和qt判断文件是否存在
头文件,加一个isDebug的布尔判断定义
源文件,isDebug这个布尔变量,是根据unity传递过来的布尔 ,进行设置,然后通过decrypt函数,对data数据体,进行解密处理; 这里的解密,是基于WMIC的fingerprint函数,也就是设备指纹,进行解密,每一台电脑,都是独一无二的; 解密后,是根据isDebug这个布尔变量,判断是返回,debug,还是release的json数据体,之前生成的时候,也是生成了两份数据的;
回到Unity,在测试脚本,先把之前的isInit设置为private私有变量即可,然后再新增一个,私有静态布尔变量 isVerification,作为信息验证的判断;
然后,新增一个,序列化的CallBackSubData类,其中包含密码、用户名,是用来接受,从qt传递过来的相关数据
再新增一个,序列化的CallBackData类,用来接受,总的,从qt传递过来的相关数据;
注释掉最开始的Debug.Log打印; 然后,通过JsonUtility.FromJson的接口,完成接收的json数据解析,进而设定,isVerification验证,相关布尔值;
保存修改,编译完成,运行游戏,可以看到,数据解析,是正常的
修改传递过去qt的布尔值,如果是false
运行游戏,可以看到,就可以提取,对应release的密码了
跟之前生成的数据,是一致的
如果把Unity.exe目录下的WMIC.data临时删掉,再重新运行
就会提示验证异常了
从回收站还原,重新运行游戏,会恢复正常