XLua中数字签名的使用

数字签名是一种非对称加密算法,首先生成一对密钥,一个公钥,一个私钥。假如A要给B发送数据,那么A首先用自己生成的密钥对里的私钥(这个 私钥只有A自己知道)对数据进行加密(相当于对数据进行签名),然后发送给B,B收到数据后使用A的公钥验证签名的真实性。

使用数字签名主要有以下的作用:

(1)防冒充(伪造),因为A的私钥只有A自己知道,没有A私钥加密的数据用A的公钥验证必然不通过。

(2)可鉴别身份,如果是经过A签名的数据,那么一定可以用A的公钥验证。

(3)防篡改(防破坏信息的完整性),如果数据修改了,用A的公钥验证不通过。

(4)防重放,如果数据有系列号那么可以防止重新发送数据。

(5)防抵赖。可以防止A不承认自己的数据,因为A的公钥验证了A的数据。

(6)机密性(保密性)。 没有A的公钥无法查看数据。

在XLua中用Tools/KeyPairsGen.exe生成公私钥对,key_ras文件保存的是私钥,key_ras.pub保存的是公钥。

用Tools/FilesSignature.exe对源代码进行签名。

签名后使用AddLoader方式加载签名后的lua文件:

  luaenv.AddLoader(new SignatureLoader("公钥", (ref string filepath) =>
            {
                filepath = Application.dataPath + "test.lua";
               
                if (File.Exists(filepath))
                {
                    return File.ReadAllBytes(filepath);
                }
                else
                {
                    return null;
                }
            }));

在SignatureLoader函数中传入生成的公钥和自己定义CustomLoader即可对签名后lua文件进行验证,SignatureLoader 函数中是具体的验证方式。