天下书楼
会员中心 我的书架
当前位置:天下书楼 > 深海风暴

第二十五章

(快捷键←)[上一章]  [回目录]  [下一章](快捷键→)

约翰·马里斯的实验室门是敞开着的,可是阿舍还是敲了敲门。

“进来,”密码学家说。

马里斯的实验室是研究站上最整洁的,屋子里看不到一星半点的灰尘。除了一个角落里小心翼翼叠放着的半打手册,他的办公桌上只有一个键盘和一台平板显示器终端。室内没有照片,没有海报,也没有其他任何个人纪念品。可在阿舍的眼里,这才是典型的马里斯:腼腆,内向,在个人生活和对事物的看法上几乎都深藏不露;全身心地沉浸在自己的工作中。对一个密码学家来说,这些都是理想的素质。

遗憾的是,此时此刻,他的当前工作——这么一段简短而且似乎很简单的代码——原来却是如此难以捉摸。

阿舍关上房门,在唯一一把来客坐的椅子里坐了下来。“我收到了你的信,”他说,“暴力破解有希望吗?”

马里斯摇了摇头。

“随机字节过滤呢?”

“意思无法理解。”

“我明白了。”阿舍灰心地陷进了椅子里。在他收到马里斯要他尽早过来一下的邮件时,他心里一阵激动,以为他已经破解出了那段代码。“尽早”这个词从安之若素的马里斯那里发出来,实际上是大声请求马上商量事情。“那么,它是个啥?”

马里斯看了他一眼,又把目光转了开去,“我不知道我们是不是,也许,正从一个错误的角度去破解这些代码。”

阿舍皱起了眉头,“什么意思?”

“是这样。昨天晚上我正在读一本有关阿兰·图灵生平的书。”

阿舍对此一点也不感到惊奇。作为一名追求完美的学者,马里斯正在致力于第二个博士学位:计算史上的重要时刻——阿兰·图灵是早期计算机理论的开创者,“说下去。”

“嗯……你知道图灵机吗?”

“你帮我重温一下吧。”

“1930年代,阿兰·图灵提出了一个理论上的计算机设想,这就是著名的图灵机。它由一条其长度可以无限延伸的‘带子’所组成。‘带子’上有一些用有限字母系统书写的符号。一个基于某种查询表的‘读取头’从‘带子’上走过,读出‘带子’上的符号并释出其含义。根据读取的不同符号,‘读取头’的状态能够变化。‘带子’上储存的既可以是数据,也可以是‘转换方法’,也就是他意谓的一些小程序。在今天的计算机中,‘带子’就是存储器,而‘读取头’就是微处理器。图灵声称这种理论上的计算机可以解决任何计算问题。”

“说下去,”阿舍说。

“我开始思考我们试图破解的这段代码。”马里斯用手指着计算机屏幕,上面显示的那个“守护神”发射的光脉冲信号,几乎像是在以它的简短和暧昧嘲弄着他们:

0000011111001010110101011001110111000101

0110001100010100011010011000010000000000

“我在想:如果这是一条图灵‘带子’呢?”马里斯继续说道,“如果我们让这些0和1从一台图灵机上通过,它们又会怎么样呢?”

慢慢地,阿舍坐着的身子朝前倾了过来。“你是说这80位代码……是一段计算机程序?”

“我知道这听起来有点疯狂,先生——”

还有什么疯狂能比得上我们身处这里这一事实本身呢,阿舍心想。“请接着说。”

“好吧。首先,我必须把这些0和1字符串分解成一个个单独的命令。我假定开头的5个0和5个1,是用来表示每条指令长度的占位符——也即由数字组成的每一个‘词’的长度是5位。于是我们就得到了14条5位长的指令。”马里斯敲了一个键,屏幕上长长的数字串消失了,取而代之的是按顺序排列的一行行数字:

00101

01101

01011

00111

01110

00101

01100

01100

01010

00110

10011

00001

00000

00000

阿舍注视着屏幕,“作为一个计算机程序它真是太短了。”

“是的。显然,它应该是一个非常简单的计算机程序。而机器语言就是数字语言的最基本也最普遍的形式。”

阿舍点点头,“然后呢?”

“等今天早晨我到了办公室,我就写了一个小程序,把这些数值跟标准的机器语言指令序列进行比较。这个小程序把所有可能的指令一个个地分派到这些数值上,再检查是否能从中得出一个可以运行的计算机程序。”

“是什么使你觉得这些信息——不管这信息是什么人发给我们的,它使用的也是跟我们一样的机器语言指令?”

“基于二进制,先生,对任何可以想象到的计算装置,存在某种不可再缩小的通用数字指令集:加,减,转移,若为0则跳过,还有布尔逻辑。所以我让这个小程序运行,并继续做我的其他工作。”

阿舍点点头。

“大约20分钟以前,这个小程序运行结束了。”

“这14行二进制数字被转译出任何可行的计算机程序了吗?”

“是的。得到了一个。”

阿舍觉得自己的兴致突然飙升起来。“真的?”

“是一个简单的数学表达式程序。就是这个。”马里斯敲了另一个键,一系列指令出现在了他的显示器屏幕上。

阿舍急切地弓腰凑了上去。

指令/助记符注释

00101add/将地址13(10进制数)的内容取出放入累加器中

0110101101/建立起一个标志

01011cnm/将标志值取反

00111plc/把结果值放入地址14

0111001110/

00101add/对地址12的内容作减法运算

0110001100/

01100isz/将标志值加1,如果值为0则转移

01010jmp/返回到第6步重复执行

0011000110/

10011end/程序结束

00001/地址12

00000/地址13

00000/地址14

“这程序是干什么的?”阿舍问。

“你会注意到它的代码在一个循环中做了一系列的重复减法运算。在机器语言里,这种方式就是在做除法:通过重复做减法来实现。哦,这只是一种方法——你也可以通过做算术右移来实现——但那样一来你就得需要一套更专业化的计算系统。”

“这么说它就是一条除法语句?”

马里斯点点头。

阿舍感到自己在惊讶和困惑之中还夹杂着突如其来的极度兴奋,“别吞吞吐吐的了,老弟。他们除的是个什么数字?”

“1。”

“1。那它又被什么数字来除?”

马里斯舔了舔嘴唇,“哦,你瞧,问题就在这里,先生……”

先看到这(加入书签) | 推荐本书 | 打开书架 | 返回首页 | 返回书页 | 错误报告 | 返回顶部
热门推荐