e.prototype.send = function(e, t, o) {
if (!cc.game.isPaused() && this.state != n.broken) {
var r = new s.default.Head();
r.wMainCmdID = e;
r.wSubCmdID = t;
var i = {
head: r,
content: o
}, c = new a.NetDataWithBY();
if (!this.aesKeyBuffer) {
this.aesKeyBuffer = u.CryptoTool.randomAesKeyBuffer();
this.aesIvBuffer = u.CryptoTool.randomAesIvBuffer();
}
c.setAes(this.aesKeyBuffer, this.aesIvBuffer);//setAes 的调用
c.initWithData(i);
c.getState() == s.default.ENetDataState.normal ? c.isPingMsg() ? this.unshiftSendArray(c) : c.isKernelDetectSocketMsg() ? this.unshiftSendArray(c) : n.reconnecting == this.state ? this.backupArraySend.push(c) : this.sendArray.push(c) : cc.error(h, this.cachekey, "send", "send fail, the NetData state is not normal");
}
};
我们要找的aesKey 和 aesIV, 是由 aesKeyBuffer和 aesIvBuffer 赋值。
分析可以得知,aesKey和aesIV都是每次启动随机生成的。
if (!this.aesKeyBuffer) { //这里判断密钥是否创建
//创建随机密钥 和 向量
this.aesKeyBuffer = u.CryptoTool.randomAesKeyBuffer();
this.aesIvBuffer = u.CryptoTool.randomAesIvBuffer();
}
//取Key
e.randomAesKeyBuffer = function() {
return n(16);
};
//取Iv
e.randomAesIvBuffer = function() {
return n(16);
};
//生成随机
function n(e) {
for (var t = [], o = 0; o < e; o++){
t.push(Math.floor(255 * Math.random() + 1));
}
return new Uint8Array(t);
}
那么我们就测试一下,把重要数据写到本地验证一下。
//js 写文件到本地方法
var writablePath = jsb.fileUtils.getWritablePath();
writablePath += "xdd/";
var fileName = "bufferToData" + "_file.js";
var fullPath = writablePath + fileName;
jsb.fileUtils.createDirectory(writablePath);
jsb.fileUtils.writeStringToFile(JSON.stringify("我的内容"), fullPath);
修改js代码保存->加密->放回缓存位置,打开游戏(具体方法请看上集ÿ