时间充裕,基础好,收入让人非常一颗赛艇。请解决下面问题联系我们:
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!
1
mokaiZz 2016-09-29 19:40:37 +08:00 via iPhone
so cool~
|
2
a812159920 2016-09-29 20:17:46 +08:00
怎么是一个广告网站?
|
3
lygmqkl 2016-09-29 20:24:49 +08:00
有点意思,但是 第 19w 的账号。。。
|
4
lygmqkl 2016-09-29 21:03:02 +08:00
我预言下,这个招聘最后没人会去解。
理由如下: 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 个小时 应该差不多就能出结果了。可是值得吗? |
5
garyglgan 2016-09-29 22:10:26 +08:00 1
骗眼球的,这个串实际上由 8 个完全一样的 md5 digest 组成,每个都是一个 MD5('text'),所以上面的串实际上是 MD5('text')+MD5('text')+MD5('text')+MD5('text')+MD5('text')+MD5('text')+MD5('text')+MD5('text')
|
6
zhaomanong OP @lygmqkl
1. 没有招聘信息是因为是灰色产业,不想引来太多的关注。但保证不违法,收入非常可观。 2. 之所以是 wechat ID 也是有一定原因的,解开之后自会明白。 感谢您的思路!但是真新没这么复杂啦, vps 都祭出来了,哈哈 Hint : 通过 hash 的长度,可以确定知道此微信 id 长度。 |
7
zhaomanong OP @garyglgan 感谢指出错误....
|
8
templefox 2016-09-29 23:30:13 +08:00
附言的连位数都不对,没有一点点诚意
|
10
goodman001 2016-09-30 01:02:37 +08:00 via iPhone
临睡前才看到,已有思路, wait for me !
|
11
goodman001 2016-09-30 01:05:06 +08:00 via iPhone
@lygmqkl 没有辣么复杂~
|
12
TotoroLee 2016-09-30 01:58:03 +08:00
golang 写完,运行不到 1 秒就能出结果~
|
13
kernel365 2016-09-30 07:51:51 +08:00 via iPhone
一颗赛艇
|
14
lygmqkl 2016-09-30 08:29:13 +08:00
@goodman001 之前的 hash 是重复的,以为是随机 string 生成的 32 位 hash ,现在的 hash 倒简单了。
|
16
newguest 2016-09-30 08:30:13 +08:00 via Android
Mark
|
17
goodman001 2016-09-30 09:39:47 +08:00
|
18
goodman001 2016-09-30 09:39:47 +08:00
|
19
goodman001 2016-09-30 09:40:14 +08:00
@lygmqkl 嘿嘿
|
20
goodman001 2016-09-30 09:40:39 +08:00
python 秒破
|
21
garyglgan 2016-09-30 10:08:39 +08:00
@zhaomanong
wechat ID 该用户不存在 |
22
ytmsdy 2016-09-30 10:16:01 +08:00
卧槽!!!!!
|
23
cocalrush 2016-09-30 10:52:32 +08:00
囧 没那么复杂 刚开始想到,直接用最后一个算我也是醉了...
|
24
Nexvar 2016-09-30 13:33:11 +08:00 via Android
楼主在美国,破译了找他不在,估计现在睡觉中
|
25
kcross 2016-09-30 15:48:48 +08:00
灰色产业 是去菲律宾开发扑克游戏吗?
|
26
huai 2016-09-30 16:19:51 +08:00
js 可破
|
27
jiangzhuo 2016-09-30 16:50:07 +08:00
解开了,原来还有这样的细分领域,似乎你们不需要 node.js 的
|
28
ezreal 2016-09-30 21:43:03 +08:00
好叼了这行业
|
29
hanswe 2016-09-30 23:05:40 +08:00
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 个,一辈子也算不出来了吧。。。 楼上算出来的各位是怎么解的? |
30
hanswe 2016-09-30 23:15:18 +08:00
明白怎么算了。。。我想错了
|
31
hanswe 2016-09-30 23:22:27 +08:00
服了。。。算出来是个干这的。。。
|
32
syv2 2016-09-30 23:31:33 +08:00
这题没什么难度吧,挨个迭代就是了,楼上有人说秒破的,我这计算花了 0.036s ,写得太糙了
加了微信,瞄了眼朋友圈,其实没灰色那么玄乎,小屁孩的作业水平 |
33
kiddz 2016-10-01 00:05:30 +08:00 via iPhone
easy one
|
34
kiddz 2016-10-01 00:06:09 +08:00 via iPhone
的确不怎么灰
|
35
kcross 2016-10-01 01:24:38 +08:00
这种事情还不灰难道还是白的?
|
36
Nexvar 2016-10-01 15:39:23 +08:00
|
37
laoyur 2016-10-01 17:19:45 +08:00
好吧,我也来贴一个, Python 初学者,轻喷……
https://gist.github.com/laoyur/08cf96cad3c76815224cfc203fd43bb3 |
38
POP 2016-10-03 19:32:40 +08:00
csdaixie
|
39
msg7086 2016-10-03 23:06:01 +08:00
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 撸逼版。 |
40
knh190 2016-10-05 13:20:20 +08:00
(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 |
41
fwy1998 2016-10-13 17:15:31 +08:00
于是...你又水了一贴?
|