【转】百度搜索结果url加密算法 python源码
百度搜索结果都是加密过的,比如:
baidu.com/link?url=a3f48d30fc293c5e471ef23de092fddc99e8cd902143baf828cbc787e08f0e3f3c49a8f7
以下就是用python实现加密的方法,此方法的缺点是无法加密https的链接,算是比较老的算法,但是仍然可以用(常被seo人士用于shua排名等领域)。
import os ascii = [ [ ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/'], [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?'], [ '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O'], [ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_'], [ '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o'], [ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', ' ']] data = [ [ 13, 10], [ 10, 1], [ 16, 15], [ 7, 6], [ 5, 13], [ 18, 9], [ 13, 11], [ 7, 12], [ 10, 5], [ 15, 9], [ 15, 9], [ 13, 5], [ 16, 11], [ 0, 1], [ 8, 2], [ 8, 5], [ 0, 0], [ 17, 15], [ 14, 8], [ 2, 1], [ 10, 5], [ 17, 14], [ 16, 5], [ 3, 8], [ 14, 9], [ 5, 8], [ 15, 1], [ 3, 15], [ 13, 10], [ 10, 12], [ 5, 7], [ 0, 2], [ 18, 14], [ 0, 15], [ 1, 6], [ 13, 5], [ 2, 1], [ 15, 14], [ 18, 8], [ 18, 9], [ 1, 10], [ 14, 14], [ 13, 2], [ 5, 3], [ 5, 8], [ 0, 4], [ 1, 5], [ 16, 1], [ 8, 1], [ 2, 5], [ 10, 7], [ 10, 15], [ 14, 14], [ 17, 3], [ 15, 0], [ 14, 5], [ 7, 7], [ 3, 4], [ 14, 8], [ 12, 0], [ 13, 12], [ 12, 3], [ 6, 5], [ 3, 1], [ 1, 14], [ 5, 4], [ 0, 12], [ 7, 0], [ 10, 7], [ 15, 12], [ 8, 2], [ 18, 15], [ 3, 12], [ 1, 12], [ 0, 15], [ 17, 4], [ 17, 2], [ 11, 1], [ 3, 12], [ 11, 5], [ 0, 13], [ 1, 1], [ 2, 12]] y = [ '0123456789abcdef', '1032547698badcfe', '23016745ab89efcd', '32107654ba98fedc', '45670123cdef89ab', '54761032dcfe98ba', '67452301efcdab89', '76543210fedcba98', '89abcdef01234567', '98badcfe10325476', 'ab89efcd23016745', 'ba98fedc32107654', 'cdef89ab45670123', 'dcfe98ba54761032', 'efcdab8967452301', 'fedcba9876543210'] x = [ '016745', '107654', '234567', '321076', '325476', '452301', '543210', '670123', '765432', '761032', '89abcd', '89efcd', '98fedc', 'abcdef', 'badcfe', 'cdab89', 'dcba98', 'ef89ab', 'fe98ba'] def encode_url(url): print(url) url_re = '' mi = '' for i, ch in enumerate(url): f_real_x = None f_real_y = None for real_x, real_y_chs in enumerate(ascii): for real_y, real_y_ch in enumerate(real_y_chs): if real_y_ch == ch: f_real_x = real_x f_real_y = real_y if f_real_y is not None and f_real_x is not None: this_data_x = x[data[i][0]] encode_x = this_data_x[f_real_x] mi = mi + encode_x this_data_y = y[data[i][1]] encode_y = this_data_y[f_real_y] mi = mi + encode_y return 'http://www.baidu.com/link?url=a3f48d30fc293c5e471ef23de092fddc99' + mi if __name__ == '__main__': t = encode_url("69tianqi.com"); print(t)
python执行结果
blog.csdn.net/miigo
http://www.baidu.com/link?url=a3f48d30fc293c5e471ef23de092fddc99e8cd902143baf828cbc787e08f0e3f3c49a8f7
访问网址即可正常跳转。
另外,如何获取加密之后的真实地址就简单多了,直接http访问加密后的地址,获取返回头部里的301跳转地址就行了。
<?php $url = "http://www.baidu.com/link?url=nS2MGJqjJ4zBBpC8yDF8xDh8vibi1lVeE7gGr9UONBu"; $info = parse_url($url); $fp = fsockopen($info['host'], 80,$errno, $errstr, 30); fputs($fp,"GET {$info['path']}?{$info['query']} HTTP/1.1\r\n"); fputs($fp, "Host: {$info['host']}\r\n"); fputs($fp, "Connection: close\r\n\r\n"); $rewrite = ''; while(!feof($fp)) { $line = fgets($fp); if($line != "\r\n" ) { if(strpos($line,'Location:') !== false) { $rewrite = str_replace(array("\r","\n","Location: "),'',$line); } }else { break; } } var_dump($rewrite); //结果显示:string(22) "http://www.google.com/" ?>
from: https://blog.csdn.net/miigo/article/details/108578094
文章乃参考、转载其他博客所得,仅供自己学习作笔记使用!!!