zoukankan      html  css  js  c++  java
  • 【转】百度搜索结果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
    ");
    fputs($fp, "Host: {$info['host']}
    ");
    fputs($fp, "Connection: close
    
    ");
    $rewrite = '';
    while(!feof($fp)) {
        $line = fgets($fp);
        if($line != "
    " ) {
            if(strpos($line,'Location:') !== false) {
                $rewrite = str_replace(array("
    ","
    ","Location: "),'',$line);
            }
        }else {
            break;
        }
    }
    var_dump($rewrite); //结果显示:string(22) "http://www.google.com/" 
    ?>

    from: https://blog.csdn.net/miigo/article/details/108578094

    文章乃参考、转载其他博客所得,仅供自己学习作笔记使用!!!
  • 相关阅读:
    day07 Pyhton学习
    day06 Pyhton学习
    Python数据分析【炼数成金15周完整课程】
    传智 Python基础班+就业班+课件 【最新完整无加密视频课程】
    万门大学Python零基础10天进阶班视频教程
    【Python高级工程师之路】入门+进阶+实战+爬虫+数据分析整套教程
    python入门:in 的用法(它在不在这个字符串里面)
    python入门:py2.x里面除法或乘法这么写就可以计算小数点后面结果
    python入门:简单模拟登陆时UTF-8转换成GBK编码
    python入门:UTF-8转换成GBK编码
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/14738443.html
Copyright © 2011-2022 走看看