to网易云信的小伙伴:

感谢你们这一次寓教于乐的创意,让我学到了很多东西,我很喜欢你们的产品。本文只是个人观点,如有雷同,不胜荣幸。本文不代表官方立场。我特意在31号发文,就是不想给你们的活动造成影响。如果造成了困扰,我深表歉意。

——程钧沅

云小信按:5月30日,云小信发出的《一封来自艾泽拉斯的密码信》,火烧朋友圈及各大论坛。一时间,“没文化连广告都看不懂了”的欢乐自嘲声,不绝于耳,文科僧&理科婶也在高考前撕起来了。

我大黄易的老司机和小伙伴们,自然也难逃烧脑,纷纷加入了这场解密风潮。事后,一高人(~竟也是位少女啊!~)在我网易实践者社区发了文,一时无数点赞跪拜~

以下是原文

网易传媒技术部-移动技术中心 · 程钧沅

上周收到网易云信的“密码信”,信中说解密正确可以获得魔兽手办。我不玩魔兽,但是我家那位是十年的魔兽玩家,曾经为了解锁炉石马,拉着我玩炉石……不如研究一下解密,人品好兴许弄个手办带回家。 闲话不多说,直接记录一下解密过程。

答案在文章中

线索一:对称加密

  • 头脑风暴:什么是对称加密? 回答:同一秘钥加密解密。

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

  • 头脑风暴:“对称加密”解决的切入点? 回答:找到秘钥

加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。

比如甲乙约定,一起买一个保险箱,保存金银财宝,共用一个钥匙。只要甲乙小心保管好钥匙,那么就算有人得到保险盒,也无法打开。可是一旦获取钥匙,就很可能拿到财宝。

线索二:八皇后

  • 头脑风暴:八皇后是什么? 回答:关于棋子摆放位置的解

八皇后问题是十九世纪著名数学家高斯于1850年提出的。

问题是:在8*8的棋盘上摆放8个皇后,使其不能互相攻击,即任意的两个皇后不能处在同一行,同一列,或同一斜线上。

  • 头脑风暴:摆放位置都有哪些? 回答:解有92组,但是不知道哪一个才是正解。

对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。 例如:15863724,代表皇后分别在第一行第一列,第二行第五列……第八行第4列等。

线索三:已知1月、2月的秘钥,求5月秘钥

  • 头脑风暴:从1月秘钥可以看出,皇后分别放在(15863724)第一行第一列,第二行第五列……第八行第四列;从2月秘钥可以看出,皇后分别放在(16837425)第一行第一列,第二行第六列……第八行第五列。 所以输入是按照1-8的升序排列。 回答:升序排列,5月秘钥是24683175

八皇后是一个古老的具有代表性的问题,用计算机求解时的算法也很多,最容易想到的是回溯法,采用一维数组来进行处理。数组的下标i表示棋盘上的第i行,a[i]的值表示皇后在第i行所放的位置。

下面引用一下C++版本的回溯法核心算法,具体算法请参考文章结尾链接。

while(not_finish) /*not_finish=1:处理尚未结束*/ {        while(not_finish && i <= NUM) /*处理尚未结束且还没处理到第NUM个元素*/ {            for(flag = 1,k = 1;flag && k < i;k++) /*判断是否有多个皇后在同一行*/if(a[k] == a[i]) flag = 0;            for(k = 1;flag && k < i;k++) /*判断是否有多个皇后在同一对角线*/if((a[i] == a[k] - (k - i)) || (a[i] == a[k] + (k - i))) flag = 0;            if(!flag) /*若存在矛盾不满足要求,需要重新设置第i个元素*/ {                if(a[i] == a[i - 1]) /*若a[i]的值已经经过一圈追上a[i-1]的值*/ {i--; /*退回一步,重新试探处理前一个元素*/if(i > 1 && a[i] == NUM)a[i] = 1; /*当a[i]为NUM时将a[i]的值置1*/else if(i == 1 && a[i] == NUM)not_finish = 0; /*当第一位的值达到NUM时结束*/else a[i]++; /*将a[i]的值取下一个值*/}                else if(a[i] == NUM) a[i] = 1;                else a[i]++; /*将a[i]的值取下一个值*/}            else if(++i <= NUM)if(a[i - 1] == NUM) a[i] = 1; /*若前一个元素的值为NUM则a[i]=1*/else a[i] = a[i - 1] + 1; /*否则元素的值为前一个元素的下一个值*/}        if(not_finish) {++count;printf((count - 1) % 3 ? " [%2d]: " : " [%2d]: ",count);            for(k = 1;k <= NUM;k++) /*输出结果*/printf(" %d",a[k]);            if(a[NUM - 1] < NUM) a[NUM - 1]++; /*修改倒数第二位的值*/else a[NUM - 1] = 1;i = NUM - 1; /*开始寻找下一个足条件的解*/}
}

其实八皇后问题早都列入了小学奥数,是的,母亲大人曾给我买过一本崭新的奥数竞赛题,我略过一眼。说到严蔚敏的C++算法,也有八皇后的一席之地。所以对于程序猿来说,解题应该不是难事。况且,网络上搜索八皇后,各种java、js、C++等的解法都是现成的。

在这些算法当中,我发现了几个特立独行的,其中一个是位算法,是10年前匿名的大神写的。简单的看了一下算法原理,它有别于传统的数组判断模式,非常效率,至少让我长见识了。我在这里只引用核心算法,具体算法可以看文章后面的参考链接。

void test(long row,long ld,long rd){    if(row != upperlim) {        long pos = upperlim & ~(row | ld | rd);        while(pos) {            long p = pos & -pos;pos -= p;test(row + p,(ld + p) << 1,(rd + p) >> 1);}} elsesum++;
}

线索四:get破译工具

  • 头脑风暴:怎么知道是哪种加密算法呢? 回答:关注云信公众平台试试。

虽然已知是对称加密,可是对称加密的种类很多,比如说CryptoJS(crypto.js)为JavaScript提供了各种各样的对称加密算法。目前已支持的常见算法包括:DES、TripleDes、AES、RC4、Rabbit等。再比如说Java版本的AES加密和JS版本的加密有区别,原因在于算法的占位方法实现不同。具体的不同参考文章末尾的链接。

没有头绪的时候,随手关注了下网易云信公众平台,竟然get到了破译工具。幸福来得太突然了,离真相只差一步了!

好吧,一个一个试吧,把密文复制进文本框,点击解密,竟然第一次就成功了。

来自艾泽拉斯的密码信传递的答案是:

网易云信请万人看魔兽电影

撒花!撒花!撒花!

总结

  • AES

既然答案是是AES加密,那我就稍微了解下这个技术吧。

AES(The Advanced Encryption  Standard)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。 近些年DES使用越来越少,原因就在于其使用56位密钥,比较容易被破解,逐渐被AES替代,AES已经变成目前对称加密中最流行算法之一。

CryptoJS是一个纯javascript写的加密类库,我们使用它只需要加入相关的引用即可:

 <script type="text/javascript" src= "http://www.osctools.net/js/CryptoJS/components/core-min.js" >
</script>
< script type= "text/javascript" src= "http://www.osctools.net/js/CryptoJS/rollups/aes.js" >
</script>
< script type= "text/javascript" >var pwd = "我的密码";var mi = CryptoJS.AES.encrypt("你好,欢迎来到开源中国在线工具,这是一个AES加密测试",pwd);   alert("你好,欢迎来到开源中国在线工具,这是一个AES加密测试----密文:" + mi);    var result = CryptoJS.AES.decrypt(mi,pwd).toString(CryptoJS.enc.Utf8);    alert("解密结果:" + result);
</script>
  • 捎带脚说一下base64

提到CryptoJS,其实我先想到的是base64。base64主要不是加密,它主要的用途是把某些二进制数转成普通字符用于网络传输。 工作原理大概是:canvas.toDataURL()首先把图像转成PNG数据,然后再把得到的二进制的PNG数据转成纯ASCII的base64编码的字符串。由于这些二进制字符在传输协议中属于控制字符,不能直接传送,所以需要转换一下,这就用到了base64。

图片的下载始终都要向服务器发出请求,但是base64可以让图片的下载不用向服务器发出请求,而是随着 HTML的下载同时下载到本地。 base64最有用的一点是解决了跨域问题。

  • 我想要手办,我想要手办,我想要手办!

听说网易云信的Amao仅用1分钟就撸开了这段密文,感叹大神无处不在。我肯定进不了解题前3名了,凑个热闹拼人品吧。大不了给你们当分母,我也不吃亏,至少学到了加密解密的各种方法。

本少女 云小信,啥也不说了

光跪拜怎表诚意呢?额外跪送您——

6月19日魔兽嘉年华专场票2张!

你破解了《密码信》没?答案是:

“ 网易云信请万人看魔兽电影 ”

↓↓↓

抢抢抢,手慢无

本次密码信活动共有206位高人破解成功!

前3位直接获奖者:

NO.1 杭州网友

NO.2北京网友

NO.3广州网友

以上3位,如先前未收到云小信的微信后台获奖留言通知,记得在微信后台回复:姓名+联系方式+地址,然后坐等你的手办!对了,告诉云小信你选哪一款哦!(奖品将在6月19号之后统一寄出)。

其他于5月30日前成功破解的参与者

不要桑心!

还有11个魔兽手办抽奖名额哦!

6月19日程序员魔兽嘉年华现场 

直播抽奖 祝君好运

~敬请期待~

现场嘉年华入场票,抢不枪!

↓↓↓

一网易少女,长文解密《一封来自艾泽拉斯的密码信》相关推荐

  1. 一封来自华尔街Quant的信

    转 一封来自华尔街 Quant 的信 亲爱的Derman先生: 你总是说要成为一个好的量化分析师有多难,我发现它根本没有你说的那么难.以后请你不要天天吓唬人了,先读读我的故事! 我拿到PhD学位后,就 ...

  2. 平安夜收到一封来自于西班牙的信

    敲代码敲着敲着,没想到平安夜来这么一出, 附上原图 内容就是 Hi Loveway,I am a software engineer and part of the Developer Relatio ...

  3. 快打开《来自艾泽拉斯的一封密码信》,破译网易重大机密

    今天,云小信收到一封来自网易内部的邮件: 这段加密乱码: U2FsdGVkX1+GwIYSkb6ewlmShIAAR+k1oKV87HFVoZlaCLjKUa3RsXxMIzs88xv2gvX9wXR ...

  4. 一封来自国家市场监督管理总局信息中心的感谢信,点赞聚铭人!

    最近,小铭哥收到了一封来自国家市场监督管理总局信息中心的感谢信! 市场监管总局信息中心对聚铭技术团队在2022年网络攻防演习工作中提供的技术支持表示诚挚的感谢和高度的肯定.信中写道,聚铭技术团队给予了 ...

  5. 一封来自山东省食药监的感谢信

    昨日,山东省计算中心软件测试部收到了一封来自山东省食品药品监督管理局(以下简称"省食药监")的感谢信,对山东省计算中心胡欣悦项目经理及项目团队在省食药监局"智慧监管&qu ...

  6. 联诚发|一封来自中国中小企业国际合作协会的感谢信

    近日,联诚发收到一封来自工业和信息化部中小企业发展促进中心.中国中小企业国际合作协会(以下简称"协会")的感谢信.信中,中心/协会对联诚发为促进中小企业协同发展作出的积极贡献以及2 ...

  7. 一封来自上海市城市运行管理中心的感谢信

    近日,维智科技收到一封来自上海市城市运行管理中心的感谢信.信中提到,感谢维智科技为上海市城市运行"一网统管"做出了积极的探索和卓越的贡献,这是对维智团队服务上海数字化转型工作成果的 ...

  8. 没文化连广告都看不懂—“网易密码信破解”【续】

    昨日,云小信发出的"密码信"火烧朋友圈及各大论坛.大知乎上,第一时间便有懵逼网友跪求破解之道,立即引来众人围观,热议: 于是当场有高人挺身而出, 给出破(zhuang)解(bi)思 ...

  9. 手把手教你解密MacOS平台下的Chrome密码

    虽然现在网上有很多开源的软件可以帮助你解密那些存储在GoogleChrome浏览器中的密码,但是这些软件几乎只支持在Windows操作系统下使用.那么对于我们这些Mac用户来说,当我们需要快速导出Ch ...

最新文章

  1. Linux 守护进程一
  2. 用Python机器学习搞定验证码
  3. cpu,内核和逻辑处理器的关系
  4. 【算法】prim算法(最小生成树)(与Dijkstra算法的比较)
  5. eclipse对maven项目进行打war包
  6. define 汉字 error C2001: newline in constant
  7. 三季度OPPO 持续热销 R11s将成新爆款
  8. bzoj 4883 [Lydsy1705月赛]棋盘上的守卫——并查集(思路!)
  9. ISO9001:2015新版质量管理体系标准时间表
  10. SM6S系列TVS二级管 可通过ISO 7637-2 5a/5b测试
  11. 如何用xmlspy将xml文档生成xsd文件
  12. NPDP知识推送-第三章新产品开发流程管理(1)
  13. EI: 室内微生物组、大气污染物与幼儿园儿童的哮喘、鼻炎和湿疹—一项重复横断面研究...
  14. Java实现对称加密
  15. 【RNN】基于RNN的动态系统参数辨识matlab仿真
  16. 接口测试二(App抓包)
  17. websocket 爬虫
  18. JAVA关于Calendar类的使用
  19. k8s跑一个nginx-app体验
  20. 富文本编辑器summernote

热门文章

  1. STM32的独立看门狗
  2. 2021春季苹果发布会到底推出哪些产品?
  3. Python制作木马
  4. iOS:沙盒之 Documents、Library、tmp、SystemData
  5. 城市道路如何设置路边停车位
  6. 积极参与中学机器人竞赛的意义
  7. 优化模型验证关键代码12:if_then_else条件约束的线性化方法及docplex代码实现
  8. ETHBMC: A Bounded Model Checker for Smart Contracts
  9. CNN——对文章类型进行分类
  10. VS2015输入反斜杠显示成人民币符号的问题