微博上看到@TechWeb转发了一个微博,内容是:
以下这段密文,为支付宝一位女工程师所编写,采用了二战时期一种著名商业密码机的加密原理,她说,她要讲的话都在这里面,包括联系方式。祝女生们节日快乐!
密文:
NRFHFLOGTBIHURDAFCKTFONJTNGFMESQSLBQEQJILGJRNNBOUSDR
GXJRIQQRJZQURVSYRLRDOFVBFKKKFFGXDNYXLWPNFPGDIDBOGXHD
NBMDSQSAKPXJHSBWYXLWWCZHJBIEHKXXYZRTPITVDOGJILLRUMCV
ULWZMQDSRALFRPNIZIBMOUSCKPWBELJGZOLOOZXJMAANELTFYLOS
ZFGKYDLKJGRPDVNWULPEOKTKFDPGNYCJPENIPQBOFDZRBOHTSHZM
OMYANWSAMKLRAGTROJEXNZTAIAJRDSDNHQVMMXDZMPTUTOMLOSNG
SLOPGTYUJJNSEHQJGSODKYPAH
提示:
1.这是按二战时期一种知名商业密码机的原理加密后的密文,温馨提示:”AZ BY”, “A”, “L”, “I”.
2. 也许这张映射表在破解的时候用的到。表暴力,要温柔~
温馨提示:目测即可破解,不是所有都用的到的噢。
{34=65, 32=66, 33=67, 40=68, 41=69, 46=70, 44=71, 93=72, 59=73, 126=74, 125=75, 124=76, 123=78, 63=77, 62=79, 61=81, 91=80, 60=82}
攻城狮们,程旭媛们,密码爱好者们,欢迎参加逻辑的狂欢!
虽然感觉阿里巴巴用像这样用女工程师来吸引呆呆的城旭猿不太厚道,但是还是打算晚上从实验室回去后试试看。
“二战时期一种著名商业密码机”指的是Enigma了,先wikipedia上了解了一下,然后找到了一个网页版的的解码机http://enigmaco.de/enigma/enigma.html。

“A”, “L”, “I”是三个转盘上的值,”AZ BY”是后面的映射。
这样,可以得到字符串:
PUBLICBCLASSBALIPAYBNBBBBBBPUBLICBVOIDBWELCOMEALLD
EBNBBBBBBBBBSYSTEMFOUTFPRINTLNDAHIJSWEETIEGBWELCOM
EBTOBALIPAYCBSOBGLADBTOBHAVEBYOUBROOTINGBFORBUSCBM
YBWEIBOBIDBISBALIPAYHUTUGBPLEASEBCONTACTBMEFBSEEBU
BSOONJAEIBBBBBKBBBBBBPUBLICBSTATICBVOIDBMAINDSTRIN
GPHBARGSEBNBBBBBBBBBALIPAYBALIPAYBQBNEWBALIPAYDEIB
BBBBBBBBALIPAYFWELCOMEALLDEIBBBBBKBKB
看样子是java代码,里面夹杂的字符的ascii值应该用提示里面的替换掉,本来打算写个程序自动替换的,后来发现这里不适用,需要人肉判断。
根据提示里的表,写了一个简单的代码来对照着翻译,输出结果在下面:
B (space)
C!
A"
D(
E)
G,
F.
I;
R<
Q=
O>
M?
P[
H]
N{
L|
K}
J~
在译码结果里面看不顺眼的地方把字符用上面的换掉,最终可以得到:
PUBLIC CLASS ALIPAY{
PUBLIC VOID WELCOMEALL(){
SYSTEM.OUT.PRINTLN("HI~SWEETIE, WELCOME TO ALIPAY! SOB GLAD TO HAVE YOU ROOTING FOR US! MY WEIBO ID IS ALIPAY****, PLEASE CONTACT ME. SEE U SOON~");//加句注释,给ID打了薄码
}
PUBLIC STATIC VOID MAIN(STRING[] ARGS) {
ALIPAY ALIPAY = NEW ALIPAY();
ALIPAY.WELCOMEALL();
}
}