数字签名是一种非对称加密算法,首先生成一对密钥,一个公钥,一个私钥。假如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 函数中是具体的验证方式。