怎样隐藏数字ID比较方便? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
andybest
V2EX    问与答

怎样隐藏数字ID比较方便?

  •  
  •   andybest 2013-04-09 21:36:49 +08:00 4536 次点击
    这是一个创建于 4647 天前的主题,其中的信息可能已经有所发展或是发生改变。
    要发给用户一个URL用于显示订单状态,例如:
    http://url/order.php?id=123

    我不想让用户知道订单号123,想最好是这样的:
    http://url/order.php?id=0605cb78

    然后我后台能用0605cb78反解析出数字id 123,然后我再去用123查工单状态

    有什么简单并且高效的算法可以实现?(这个感觉没必要上RSA这样的,保密级别没这么高)
    15 条回复    1970-01-01 08:00:00 +08:00
    CoX
        1
    CoX  
       2013-04-09 21:44:48 +08:00
    再搞个字段就行了,订单号可以自己组合,比如日期再加几个随机数字 ex:2013040921460101
    qiuai
        2
    qiuai  
    PRO
       2013-04-09 21:48:53 +08:00   1
    1=>a,2=>b....
    0x0001
        3
    0x0001  
       2013-04-09 21:49:09 +08:00
    我会使用生成时刻的timestamp进行处理,如截取几位,再加上id号,毕竟订单生成时刻应该是必存的。
    Air_Mu
        4
    Air_Mu  
       2013-04-09 21:50:33 +08:00
    多搞一个字段做查询
    Js
        5
    Js  
       2013-04-09 21:59:54 +08:00
    简单点就是随便弄个数字做异或, 再base32/base62/base64一下算了
    andybest
        6
    andybest  
    OP
       2013-04-09 22:00:56 +08:00
    @CoX @0x0001 @Air_Mu 为了这个小需求多增加一个字段感觉不值得

    @qiuai 感谢,这个方法不错。。但是有点太简单了,比如如果给用户一个
    /order.php?id=a
    这似乎就暴露了什么。。。
    andybest
        7
    andybest  
    OP
       2013-04-09 22:01:41 +08:00
    @Js 请问怎么"随便弄个数字做异或"? 谢谢!
    Js
        8
    Js  
       2013-04-09 22:05:41 +08:00   1
    @andybest

    irb(main):001:0> XOR_NUM = 123321
    => 123321
    irb(main):002:0> code = (123 ^ XOR_NUM).to_s 32
    => "3oe2"
    irb(main):003:0> (code.to_i 32) ^ XOR_NUM
    => 123
    qiuai
        9
    qiuai  
    PRO
       2013-04-10 12:21:27 +08:00
    @andybest 因为你还要进行反解,所以建立字典是最快的办法.
    qdcanyun
        10
    qdcanyun  
       2013-04-10 17:00:26 +08:00
    基本思想就是产生一个无序字符串
    然后做字典对应让每个无序串真实id
    virushuo
        11
    virushuo  
       2013-04-10 17:04:45 +08:00   1
    类似于做短网址的方法,你转换这个数字到一个新的数制,比如62进制(考虑到url字符安全,62进制比较常用),然后创建一个62位长的码表,做映射。这样就转成了一个数字+字母的ID。

    反转回来的时候别人不知道你的码表顺序,只拿一个id不太容易反算回去。当然如果非要算也能算出来,收集几个连续id就算出来了。但你这也不是为了加密,被猜出来也无所谓。

    参考:

    http://stackoverflow.com/questions/4728855/please-explain-this-base-62-php-conversion-function-algorithm
    Livid
        12
    Livid  
    MOD
    PRO
       2013-04-10 17:05:48 +08:00
    import uuid

    uuid.uuid1()
    cutehalo
        13
    cutehalo  
       2013-04-10 17:05:49 +08:00
    可以用一些不常用的进制转换 什么17进制 63进制的...
    Livid
        14
    Livid  
    MOD
    PRO
       2013-04-10 17:06:15 +08:00
    最好是再加个 UUID 字段。
    andybest
        15
    andybest  
    OP
       2013-04-10 17:42:04 +08:00
    @virushuo 感谢!对我很有用!

    @Livid uuid.uuid1() 这个方法有什么作用?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1312 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:58 PVG 00:58 LAX 08:58 JFK 11:58
    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