寻找了很久farmKey的算法,给出的都是已经过时的就看了一下午Flash,把开心农场中farmKey的代码全搜集出来了,由于没有接触过Flash编程,意义还需要慢慢理解~
研究过开心农场的朋友应该都看过,在flash中进行动作与服务器交互的时候,是以get方式提交,提交的数据中包含farmKey和farmTime两个比较重要的验证参数,如下代码:
private function request(param1:String, param2:Object, param3:Function, param4:int = 60000, param5:Boolean = false, param6:String = "text") : void { var url:* = param1; var value:* = param2; var handlerFun:* = param3; var timeout:* = param4; var reload:* = param5; var dataFormat:* = param6; var _timeValue:* = MData.getInstance().mainData.serverTime; var farmKey:* = MD5.hash(_timeValue + SecurityKey.encodeKey); var farmTime:* = String(_timeValue); url = url + ("&farmKey=" + farmKey + "&farmTime=" + farmTime + "&inuId=" + SessionKey.value); HTTPRequest.getInstance().postRequest(url, value, [此处直接递交了一个函数,太长,剪掉], timeout, reload, dataFormat); return; } 代码有点乱……是直接从Flash中得到的,可以看到: var _timeValue:* = MData.getInstance().mainData.serverTime; var farmTime:* = String(_timeValue); 而mainData.serverTime;是从如下函数计算的: public function get serverTime() : Number { if (_serverTime == 0) { return Math.floor(new Date().getTime() / 1000); }// end if return _serverTime + (Math.floor(getTimer() / 1000) - _clientTime); }// end function 最后计算farmKey,farmKey的计算函数是: var farmKey:* = MD5.hash(_timeValue + SecurityKey.encodeKey); 可以看到farmKey是farmTime+一个安全码的MD5值,安全码的产生代码如下: public static function get encodeKey() : String { var _loc_1:Bitmap; var _loc_2:String; if (_encodeKey != "inu") { return _encodeKey; }// end if _loc_1 = new KEYJPG(); _loc_2 = _loc_1.bitmapData.getPixel32(3, 5).toString(23); return _loc_2; }// end function 这是一个完整的farmKey的产生过程。 如果达人看到,希望帮忙指点~