zhaomanong
V2EX  ›  外包

招兼职程序员 语言不限

  •  1
     
  •   zhaomanong · Sep 29, 2016 · 3056 views
    This topic created in 3691 days ago, the information mentioned may be changed or developed.

    时间充裕,基础好,收入让人非常一颗赛艇。请解决下面问题联系我们:

    We hope you can contact our wechat ID hashed below:

    1cb251ec0d568de6a929b520c4aed8d11cb251ec0d568de6a929b520c4aed8d11cb251ec0d568de6a929b520c4aed8d11cb251ec0d568de6a929b520c4aed8d11cb251ec0d568de6a929b520c4aed8d11cb251ec0d568de6a929b520c4aed8d11cb251ec0d568de6a929b520c4aed8d11cb251ec0d568de6a929b520c4aed8d1

    First, we generated a series of string prefixes with lengths increasing by 1. For example, if our wechat ID was helloworld, we would generate: he hell hellow hellowor ... helloworld

    Then, for every prefix s, we computed the following hash J: md5(md5(e) + s + md5(s)) [where + is the string concatenation operator and e is 'v2ex']. Finally, we concatenated all hash strings J to form the long hash above!

    For example, for helloworld, we would compute: md5(md5('v2ex') + 'h' + md5('h')) + md5(md5('v2ex') + 'he' + md5('he')) + md5(md5('v2ex') + 'hel' + md5('hel')) + ...

    For the sake of simplicity, you can assume that our wechat ID only contains alphanumeric characters.

    After solving the challenge, please contact the wechat ID that you decoded and send us your resume. You can also access our website by www.wechatID.com know what we do.

    Good Luck!

    Supplement 1  ·  Sep 29, 2016
    o(╯□╰)o 囧囧囧

    发现生成 hash 的程序写错了。。对一个固定字符串进行 hash 了。 Sorry!

    应该是

    3bed22f7f496e84b035a996522baa7594c27c7e5718a78bfddf9012904b70eb755d67f90c8de149ead7ee674b024f38c216642030c2d54cb1dd657dd66342c99c239f3c31fd399fc052a9b7861f2073d2b9f47811dd77fd544d570c34bf5f349d110389979571714694a5054238465ca38ba26c25fb1a32b4d0a3b93666b09b3
    Supplement 2  ·  Sep 30, 2016
    这一期招满啦,非常感谢大家的参与。真是各路语言齐飞啊 哈哈哈。

    还会有下一期,下次争取想个更好玩的题。
    40 replies  •  2016-10-13 17:15:31 +08:00
    mokaiZz
    mokaiZz
    Sep 29, 2016 via iPhone
    1
    so cool~
    a812159920
    a812159920
    Sep 29, 2016
    2
    怎么是一个广告网站?
    lygmqkl
    lygmqkl
    Sep 29, 2016
    3
    有点意思,但是 第 19w 的账号。。。
    lygmqkl
    lygmqkl
    Sep 29, 2016
    4
    我预言下,这个招聘最后没人会去解。

    理由如下:
    1. 信息不对等,甚至有点不放心。对所谓的招聘几乎一无所知,只说了收入好,保不齐是小 P 孩想出来的点子。我就不相信一个做 Web 的解出这道题就能去写桌面程序了?

    2. 看似专业的招聘其实内容有逻辑漏洞,感觉在显摆。特别是最后一句话, wechat ID, 除了账号和数字,还能有第三种组成?中文,特殊字符?与其说这个不如说下总长度,或许那才是 sake of simplicity

    最后说下解法,这个纯粹是为了防止被喷,提一下思路:

    首先长度,我估计在 6-10 位,如果是手机号有可能是 11 位,可以优先尝试纯数字,因为 wechat 后期的策略是手机号注册。

    接着说解法,就是拿一定规则生成的字符串,通过提示的 hash logic 生成,然后和 1cb251ec0d568de6a929b520c4aed8d1 做对比

    接着说字符串生成规则,既然是只有字母和数字,考虑 ascii 码通过数字在一定范围内变幻的方式来穷举吧

    最后说点我喜欢的可以上升到架构层面来玩一下,其实是最终用时
    第一步,可以开一台 vps ,新建一个数据库,然后用 php cli 模式不停的往数据库里去写入穷举字符串,可以多跑几个 cli 用长度区分 比如 A(1-5bit 数量很少还是 cover 一下)B(6bit)C(7Bit)D(8Bit).
    第二部,再写个简单的 php cli 多线程代码,包含数据库读取|拆分|加密过程,结果不用存回了,比较下不合适就丢弃吧(已读数据 flag)。这个 php cli 代码可以部署到 20 台(更多)aliyun vps 上形成一个小型分布式系统对数据库里不停出现的字符串进行比对,命中后给自己发个邮件吧。

    时间嘛 估计 4-5 个小时 应该差不多就能出结果了。可是值得吗?
    garyglgan
    garyglgan
    Sep 29, 2016❤️1
    5
    骗眼球的,这个串实际上由 8 个完全一样的 md5 digest 组成,每个都是一个 MD5('text'),所以上面的串实际上是 MD5('text')+MD5('text')+MD5('text')+MD5('text')+MD5('text')+MD5('text')+MD5('text')+MD5('text')
    zhaomanong
    zhaomanong
    OP
    Sep 29, 2016
    6
    @lygmqkl
    1. 没有招聘信息是因为是灰色产业,不想引来太多的关注。但保证不违法,收入非常可观。
    2. 之所以是 wechat ID 也是有一定原因的,解开之后自会明白。

    感谢您的思路!但是真新没这么复杂啦, vps 都祭出来了,哈哈

    Hint : 通过 hash 的长度,可以确定知道此微信 id 长度。
    zhaomanong
    zhaomanong
    OP
    Sep 29, 2016
    7
    @garyglgan 感谢指出错误....
    templefox
    templefox
    Sep 29, 2016
    8
    附言的连位数都不对,没有一点点诚意
    templefox
    templefox
    Sep 29, 2016
    9
    @templefox 是我看错了
    goodman001
    goodman001
    Sep 30, 2016 via iPhone
    10
    临睡前才看到,已有思路, wait for me !
    goodman001
    goodman001
    Sep 30, 2016 via iPhone
    11
    @lygmqkl 没有辣么复杂~
    TotoroLee
    TotoroLee
    Sep 30, 2016
    12
    golang 写完,运行不到 1 秒就能出结果~
    kernel365
    kernel365
    Sep 30, 2016 via iPhone
    13
    一颗赛艇
    lygmqkl
    lygmqkl
    Sep 30, 2016
    14
    @goodman001 之前的 hash 是重复的,以为是随机 string 生成的 32 位 hash ,现在的 hash 倒简单了。
    lygmqkl
    lygmqkl
    Sep 30, 2016
    15
    @garyglgan 昨天睡觉前我也发现了是 text 加密。
    newguest
    newguest
    Sep 30, 2016 via Android
    16
    Mark
    goodman001
    goodman001
    Sep 30, 2016
    17
    goodman001
    goodman001
    Sep 30, 2016
    18
    goodman001
    goodman001
    Sep 30, 2016
    19
    @lygmqkl 嘿嘿
    goodman001
    goodman001
    Sep 30, 2016
    20
    python 秒破
    garyglgan
    garyglgan
    Sep 30, 2016
    21
    @zhaomanong
    wechat ID 该用户不存在
    ytmsdy
    ytmsdy
    Sep 30, 2016
    22
    卧槽!!!!!
    cocalrush
    cocalrush
    Sep 30, 2016
    23
    囧 没那么复杂 刚开始想到,直接用最后一个算我也是醉了...
    Nexvar
    Nexvar
    Sep 30, 2016 via Android
    24
    楼主在美国,破译了找他不在,估计现在睡觉中
    kcross
    kcross
    Sep 30, 2016
    25
    灰色产业 是去菲律宾开发扑克游戏吗?
    huai
    huai
    Sep 30, 2016
    26
    js 可破
    jiangzhuo
    jiangzhuo
    Sep 30, 2016
    27
    解开了,原来还有这样的细分领域,似乎你们不需要 node.js 的
    ezreal
    ezreal
    Sep 30, 2016
    28
    好叼了这行业
    hanswe
    hanswe
    Sep 30, 2016
    29
    var charSets = ['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', '_', '-'];

    试了下穷举, 8^64 次方,用 node 大概 4s 算了 1w 个,一辈子也算不出来了吧。。。

    楼上算出来的各位是怎么解的?
    hanswe
    hanswe
    Sep 30, 2016
    30
    明白怎么算了。。。我想错了
    hanswe
    hanswe
    Sep 30, 2016
    31
    服了。。。算出来是个干这的。。。
    syv2
    syv2
    Sep 30, 2016
    32
    这题没什么难度吧,挨个迭代就是了,楼上有人说秒破的,我这计算花了 0.036s ,写得太糙了

    加了微信,瞄了眼朋友圈,其实没灰色那么玄乎,小屁孩的作业水平
    kiddz
    kiddz
    Oct 1, 2016 via iPhone
    33
    easy one
    kiddz
    kiddz
    Oct 1, 2016 via iPhone
    34
    的确不怎么灰
    kcross
    kcross
    Oct 1, 2016
    35
    这种事情还不灰难道还是白的?
    laoyur
    laoyur
    Oct 1, 2016
    37
    好吧,我也来贴一个, Python 初学者,轻喷……
    https://gist.github.com/laoyur/08cf96cad3c76815224cfc203fd43bb3
    POP
    POP
    Oct 3, 2016
    38
    csdaixie
    msg7086
    msg7086
    Oct 3, 2016
    39
    require 'digest'

    md5 = '3bed22f7f496e84b035a996522baa7594c27c7e5718a78bfddf9012904b70eb755d67f90c8de149ead7ee674b024f38c216642030c2d54cb1dd657dd66342c99c239f3c31fd399fc052a9b7861f2073d2b9f47811dd77fd544d570c34bf5f349d110389979571714694a5054238465ca38ba26c25fb1a32b4d0a3b93666b09b3'
    prefix = Digest::MD5.hexdigest 'v2ex'
    str = ''

    md5.scan(/.{32}/) { |m| str += [*'0'..'9',*'A'..'Z',*'a'..'z'].find { |s| Digest::MD5.hexdigest(prefix + str + s + Digest::MD5.hexdigest(str + s)) == m } }

    puts str #=> csdaixie

    撸逼版。
    knh190
    knh190
    Oct 5, 2016
    40
    (defun solve (str)
    (let ((ans ""))
    (do ((i 0 (+ i 32)))
    ((>= i (length str)) 'done)
    (let ((s (subseq str i (+ i 32))))
    (setf ans (solve-rec s ans))))
    ans))

    (defun solve-rec (s ans)
    (loop for a in (append *lower* *upper*) do
    (let ((next (concatenate 'string ans a)))
    (if (equal (hash next) s)
    (return next)))))

    Lisp 版: https://gist.github.com/KHN190/b85a1258b3bcdb5f01a4649074d5e38c
    fwy1998
    fwy1998
    Oct 13, 2016
    41
    于是...你又水了一贴?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   681 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 70ms · UTC 21:28 · PVG 05:28 · LAX 13:28 · JFK 16:28
    ♥ Do have faith in what you're doing.