求微信和支付宝二维码动态生成原理? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
simplesslife

求微信和支付宝二维码动态生成原理?

  •  
  •   simplesslife May 5, 2016 21079 views
    This topic created in 3646 days ago, the information mentioned may be changed or developed.

    RT ,最近项目中要用到,请各路大神不吝赐教

    18 replies    2019-04-09 10:29:22 +08:00
    murmur
        1
    murmur  
       May 5, 2016
    大概就是保持服务器和手机时间近似同步吧 然后有一套算法去加密这个时间就可以了
    liyvhg
        2
    liyvhg  
       May 5, 2016 via Android
    实际上是个 URL 的短链接。可能一部分校验在服务器一部分数据在 URL 里面吧。业余答复。
    mio4kon
        3
    mio4kon  
       May 5, 2016
    会有几张保存在本地,所以没网也会有二维码
    JiShuTui
        5
    JiShuTui  
       May 5, 2016
    都是按格式生成 URL 然后 APP 去处理 URL
    simplesslife
        6
    simplesslife  
    OP
       May 5, 2016
    @murmur 离线怎么处理,请求量大的话怎么,一个时间可能有多个项。。
    @liyvhg @JiShuTui @mio4kon @skyshy @murmur 谢谢
    还有二维码的使用,安全,使用周期怎么控制。。
    murmur
        7
    murmur  
       May 5, 2016
    @simplesslife 一个时间应该只会有一张图片 精确到半分钟或者一分钟就可以了
    mkeith
        8
    mkeith  
       May 5, 2016
    应该类似网银的"动态密码"那种原理吧
    haitang
        9
    haitang  
       May 6, 2016 via Android
    查了下微信的付款二维码,是 18 位数字编号,感觉是预定的验证码,又顺手抓了下包,发现请求一个 tenpay 接口,返回的数据长度 1300+,根据长度看,如果是纯黑白图片,可能是一个二维码大小,就是说,二维码是服务器来生成的。

    PS: 微信中,我的二维码功能,是由服务器生成的,不过这个二维码是美化过的,不确定本地是否有二维码生成模块
    venster
        10
    venster  
       May 6, 2016
    @murmur 不知道服务器端都没有存储客户端最近一次的时间偏差,要是存储了的话,应该可以允许更高的时间误差。
    murmur
        11
    murmur  
       May 6, 2016
    @haitang
    @venster
    支付宝钱包可以离线支付,下面有小字写了每分钟自动更新,我想大概时间差就是半分钟吧,把时间作为参数加到二维码里了
    simplesslife
        12
    simplesslife  
    OP
       May 6, 2016
    @murmur 嗯,我看了一下,应该跟你说的差不多,就是生成的规则具体是怎样的,是把时间和用户信息合在一起 hash 还是别的方法。
    murmur
        13
    murmur  
       May 6, 2016
    @simplesslife 具体参考魔兽世界的手机安全令牌 有开源版 只要把那个数字加大能凑出一幅图就够了
    eirk2004
        14
    eirk2004  
       May 6, 2016
    secret key + time stamp
    simplesslife
        15
    simplesslife  
    OP
       May 6, 2016
    @murmur @eirk2004 看了一下,貌似是 totp 算法
    731193550
        16
    731193550  
       Jun 6, 2016
    你好,大神联系方式是什么?学习下
    myshzzx
        17
    myshzzx  
       May 6, 2017
    猜想应该是这么生成的, 用户 id+key 得到一个数字串, 然后用支付宝公钥加密一下得到.
    key 应该是楼上说的 totp 算法生成的, 生成密钥在登录支付宝时从服务器获取即可.
    服务端验证: 只需验证 key 是由当前用户的密钥生成即可.
    这里有个安全漏洞: 生成 key 的密钥需要保存在本地, 一旦手机被 root, 这个密钥可能泄露.
    youyaang
        18
    youyaang  
       Apr 9, 2019
    [大雾] 干脆每次都传好几个给手机,定时联网刷新,刷新失败就用本地缓存(就是之前提前发过来的),就是现在是 abc,30 秒后换成 abd (本地缓存),再 60 秒后 abe (本地缓存),手机时钟在短时间内怎么说也是可靠的吧(当然你也可以用时间戳
    About     Help     Advertise     Blog     API     FAQ     Solana     5162 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 66ms UTC 08:35 PVG 16:35 LAX 01:35 JFK 04:35
    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