phpを使ってBaidu mp3アドレスの暗号化方式を書き換える
Baidu mp3 アドレスは暗号化されています。具体的な暗号化方法は次のとおりです。
//copyright http://www.k686.com //author tuzwu58@gmail.com function decode(url){ var len = url.length; var decurl = ""; var asc_arr1 = [], asc_arr2 = []; var key = sertim % 26; key = key ? key : 1; function init(head, bottom, middle){ for (var i = head; i <= bottom; i++) { asc_arr1[i] = i + middle; asc_arr2[i + middle] = i; } } init(0, 9, 48); init(10, 35, 55);//http://www.k686.com init(36, 61, 61); for (var i = 0; i < len; i++) { var word = url.charAt(i); if (/[A-Za-z0-9]/.test(word)) { var pos = asc_arr2[url.charCodeAt(i)] - key; if (pos < 0) pos += 62; word = String.fromCharCode(asc_arr1[pos]); } decurl += word; } return decurl; }
?
受信文字列の形式は次のとおりです:
str = "o00w://333.osq.z0h0z.nv2.ju/q5/4p14phuzopN1hun/44zn977D7A9F8G-7A.twA";
var sertim = 1289225685;
?
標準 URL アドレスに解析できるように、2 つの変数を上記の関数に組み込む必要があります。
?
以下はphpで書き換えられます:
//copyright http://www.k686.com //author tuzwu58@gmail.com function decode($url,$sertim){ $len = strlen($url); $decurl = ""; $asc_arr1 = array(); $asc_arr2 = array(); $key = $sertim % 26; $key = $key ? $key : 1; //第1次 http://www.k686.com for ($i = 0; $i <= 9; $i++) { $asc_arr1[$i] = $i + 48; $asc_arr2[$i + 48] = $i; } //第2次 for ($i = 10; $i <= 35; $i++) { $asc_arr1[$i] = $i + 55; $asc_arr2[$i + 55] = $i; } //第3次 for ($i = 36; $i <= 61; $i++) { $asc_arr1[$i] = $i + 61; $asc_arr2[$i + 61] = $i; } //end http://www.k686.com for ($i = 0; $i < $len; $i++) { $word = substr($url,$i,1); if (preg_match("/[A-Za-z0-9]/",$word)) { $pos = $asc_arr2[ord(substr($url,$i,1))] - $key; if ($pos < 0){ $pos += 62; } $word = chr($asc_arr1[$pos]); } $decurl .= $word; } return $decurl; } $str = 'o00w://333.osq.z0h0z.nv2.ju/q5/4p14phuzopN1hun/44zn977D7A9F8G-7A.twA'; $sertim = 1289225685; echo decode($str,$sertim);
?
js 関数は php で書き直されており、渡される 2 つのパラメーターはまったく同じです。
?