求get请求中参数加密解密算法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
workaholic
V2EX    程序员

求get请求中参数加密解密算法

  •  
  •   workaholic 2013-04-22 10:19:54 +08:00 7625 次点击
    这是一个创建于 4633 天前的主题,其中的信息可能已经有所发展或是发生改变。
    求get请求中参数加密解密算法,例如id值,加密后最好是定长的,字母和数字组合,谢谢
    第 1 条附言    2013-04-22 17:18:42 +08:00
    例如一个id整数值 加密成 51490d5ec2ea581014000508
    28 条回复    1970-01-01 08:00:00 +08:00
    xing393939
        1
    xing393939  
       2013-04-22 10:22:24 +08:00
    办法太多了吧,自己弄个就行,用网上的说不定一眼就被人看出来了
    workaholic
        2
    workaholic  
    OP
       2013-04-22 10:24:53 +08:00
    @xing393939 恩,感觉自己写的不太靠谱,最好有开源的,因为要长久使用
    avichen
        3
    avichen  
       2013-04-22 10:27:47 +08:00   1
    找一个可逆的加密算法不就可以了?
    workaholic
        4
    workaholic  
    OP
       2013-04-22 10:32:21 +08:00
    都不太理想,主要是结果太长,而且容易造成url数据出错(有特殊字符),希望找个短一些的,固定长度最好,字母数字组合最好
    lululau
        5
    lululau  
       2013-04-22 10:54:47 +08:00
    什么应用场景?防作弊?用普通的对称加密,AES/DES 即可
    BOYPT
        6
    BOYPT  
       2013-04-22 11:13:44 +08:00
    定长这个要求就难了。

    不定长AES/DES然后urlencode就好。
    ayang23
        7
    ayang23  
       2013-04-22 11:21:02 +08:00
    难道是想防窃听?对称加密怎么加都解决不了这个问题。考虑用非对称的吧。重要数据用post比较方便吧、、
    master
        8
    master  
       2013-04-22 11:35:59 +08:00
    避免url数据出错没啥,不管啥加密到url最保险的做法基本都是最后BASE64+urlencode吧。。。。。。如果数据本身就长的话,那这么做肯定就更长了。。。。尽可能还是避免get,能post的还是post吧。
    Cadina
        9
    Cadina  
       2013-04-22 11:37:37 +08:00   1
    @workaholic 加密成二进制数据后,用十六进制编码不就可以了?
    xing393939
        10
    xing393939  
       2013-04-22 13:37:07 +08:00
    workaholic
        11
    workaholic  
    OP
       2013-04-22 17:06:10 +08:00
    @ayang23 不是。这个还真避免不了,因为是放在用户网页里面的一个链接,需要存id值
    workaholic
        12
    workaholic  
    OP
       2013-04-22 17:11:02 +08:00
    @xing393939 谢谢,但是测试了不准,2147483642就不行
    workaholic
        13
    workaholic  
    OP
       2013-04-22 17:16:32 +08:00
    @Cadina 这个看起来太明显了,例如 7FFFFFFF
    binux
        14
    binux  
       2013-04-22 17:48:07 +08:00
    条件不明,要求固定长度,但是又不知道你id的长度范围,怎么固定?
    需求不明,是不想被中间人知道,还是不想被用户端知道,亦或者仅仅不想在get中展示?
    workaholic
        15
    workaholic  
    OP
       2013-04-22 17:52:57 +08:00
    @binux 你的逻辑我很是佩服
    hpyhacking
        16
    hpyhacking  
       2013-04-22 20:22:08 +08:00
    @binux
    @workaholic

    一般这种情况是不想被用户端知道吧。
    qq286735628
        17
    qq286735628  
       2013-04-22 20:24:03 +08:00
    之前用过RC4+URLencode
    ljbha007
        18
    ljbha007  
       2013-04-22 20:28:53 +08:00
    最简单的办法就是用个密码字符串转成数字然后和ID异或
    解密的时候就再异或一次就得到原来的ID了
    只要猜不出来密码字符串就很难破解
    binux
        19
    binux  
       2013-04-22 21:12:02 +08:00
    如果是不想被用户端知道,那根本就用不着什么加解密算法啊,随便给id建一个映射,保存在服务器端,把key发给用户端就好了,需要id的时候再转回来就完了
    V2SK
        20
    V2SK  
       2013-04-22 21:53:51 +08:00
    @binux 这种方法不可靠吧,加密的目的就是让用户猜不到,建不建映射不都一样么
    V2SK
        21
    V2SK  
       2013-04-22 21:54:49 +08:00
    @hpyhacking 肯定了,所以说我比较佩服@binux的逻辑嘛
    workaholic
        22
    workaholic  
    OP
       2013-04-22 21:58:42 +08:00
    @ljbha007 恩,这个强度已经足够了,discuz的加密方法就是用的异或,非常经典
    WellWiFi
        23
    WellWiFi  
       2013-04-23 00:46:06 +08:00 via iPhone
    告诉你个简单办法,如果是1开头,设置1对应xx,2对应xx8,如果是2开头走一个路线设置1对应mm,2对应 k,然后13开头是一种对应方式,解密逆向就行了,非常简单58就是这么做,我还没解开密码,也可以用每过一段时间换一套方法
    xing393939
        24
    xing393939  
       2013-04-23 09:56:25 +08:00
    xing393939
        25
    xing393939  
       2013-04-23 09:56:54 +08:00
    @workaholic
    <?php

    $a = encode(2147483642);
    echo $a, '<br/>';
    $b = decode($a);
    echo $b;

    function encode($id) {
    if($id > 100) {
    $id = (string) $id;
    $len = strlen($id) - 1;
    $id = $id{0} . $id{$len} . substr($id, 2, -1). $id{1};
    }
    $id += 60512868;
    $str = base_convert($id, 10, 36);
    $str = substr($str, 0, -2) . xchange($str{4}) . xchange($str{5});
    return $str;
    }

    function decode($str) {
    $str = substr($str, 0, -2) . xchange($str{4}, 1) . xchange($str{5}, 1);
    $id = base_convert($str, 36, 10);
    $id -= 60512868;
    if($id > 100) {
    $id = (string) $id;
    $len = strlen($id) - 1;
    return $id{0} . $id{$len} . substr($id, 2, -1). $id{1};
    } else {
    return $id;
    }
    }

    function xchange($s, $decode = 0) {
    if($decode) {
    $str = "ytuvsrqzxwilng7fed2cbajk1096h53m8o4p";
    } else {
    $str = "poiuytrewqlkjhgfdsamnbvcxz6541239807";
    }
    $s = base_convert($s, 36, 10);
    return $str{$s};
    }
    ?>
    xing393939
        26
    xing393939  
       2013-04-23 09:59:54 +08:00   1
    sorry 看错了 是有问题,应该是个bug,有时间修复下
    xing393939
        27
    xing393939  
       2013-04-23 10:24:27 +08:00
    <?php

    $a = encode(2147483642);
    echo $a, '<br/>';
    $b = decode($a);
    echo $b;

    $time=microtime(1);
    for ($i=0;$i<100000;$i++)
    hash('md5', 'string');
    echo microtime(1)-$time,': hash/md5<br>';

    $time=microtime(1);
    for ($i=1;$i<200;$i++) {
    $s = encode($i);
    //echo $s, '<br>';
    echo decode($s), '<br>';

    }
    echo microtime(1)-$time,': jia/jie<br>';

    function encode($id)
    {
    if ($id > 100) {
    $id = (string)$id;
    $len = strlen($id) - 1;
    $id = $id{0} . $id{$len} . substr($id, 2, -1) . $id{1};
    }
    $id += 60512868;
    $str = base_convert($id, 10, 36);
    $l = strlen($str);
    $str = substr($str, 0, $l - 2) . xchange(substr($str, -2, 1)) . xchange(substr($str, -1));
    return $str;
    }

    function decode($str)
    {
    $l = strlen($str);
    $str = substr($tr, 0, $l - 2) . xchange(substr($str, -2, 1), 1) . xchange(substr($str, -1), 1);
    $id = base_convert($str, 36, 10);
    $id -= 60512868;
    if ($id > 100) {
    $id = (string)$id;
    $len = strlen($id) - 1;
    return $id{0} . $id{$len} . substr($id, 2, -1) . $id{1};
    } else {
    return $id;
    }
    }

    function xchange($s, $decode = 0)
    {
    if ($decode) {
    $str = "ytuvsrqzxwilng7fed2cbajk1096h53m8o4p";
    } else {
    $str = "poiuytrewqlkjhgfdsamnbvcxz6541239807";
    }
    $s = base_convert($s, 36, 10);
    return $str{$s};
    }

    ?>
    summic
        28
    summic  
       2013-04-23 18:28:02 +08:00
    @xing393939 小六真帅!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2658 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 09:25 PVG 17:25 LAX 01:25 JFK 04:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86