中山北路的“芳馨花艺”店面不大,但布置精致。玻璃橱窗内,各色鲜花在柔和的灯光下显得生机盎然。推门而入时,门铃发出清脆的响声。
一位四十岁左右、围着碎花围裙的女店主从后面的工作间走出来,手上还沾着水珠。“欢迎光临,需要什么花?”
苏晚晴从手机里翻出三个月前收到花时拍的照片,放大包装纸的部分,递给店主看:“您好,我想打听一下。三个月前,大概是七月十二号左右,有没有人从您这里订过这样包装的玫瑰花,送到城西的明诚律师事务所?”
店主接过手机,仔细看了看包装纸,又抬头打量了一下苏晚晴,眼神里闪过一丝了然和谨慎。“哦,这个包装纸是我们店专用的没错。不过订单记录……”她擦了擦手,走到柜台后的电脑前,“时间有点久了,我得查查。请问您是?”
“我是当时的收花人。”苏晚晴尽量让语气显得平静,“那束花对我很重要,我想找到送花的人,当面表示感谢。”
店主敲击键盘的手顿了顿,从屏幕前抬起头,露出一个抱歉的笑容:“抱歉啊,顾客的隐私我们不能透露。这是规定。”
“我理解。”苏晚晴早有准备,从包里拿出名片和一份委托书模样的文件——实际上是她临时准备的询问授权,但格式足够正式,“我是律师,这涉及到一件陈年旧事的调查。我不是要追究什么,只是想确认一些信息。或者,您能不能告诉我,订花的人是男是女?大概什么年龄?他有没有留下什么特别的话?”
店主看着名片上“明诚律师事务所”的字样和律师头衔,犹豫了一下,但依然摇头:“真不行。我们签过保密协议的,而且那位客人特别交代过,不能透露任何信息。”
特别交代过。这句话让苏晚晴的心跳漏了一拍。她向前一步,压低声音:“他是不是一个年轻男人?大概这么高,”她用手比划了一下纪寒川的身高,“有点瘦,不太爱说话,右手虎口这里可能有一道疤?”
店主的眼神明显闪烁了一下,随即垂下眼帘,继续操作电脑,但动作明显有些慌乱。“我真的不知道。订单上只留了收花人地址和电话,付款是线上支付的,我们看不到客人信息。”
她在撒谎。苏晚晴几乎可以确定。那个闪烁的眼神,那瞬间的慌乱,都说明她至少对送花人有印象。
“拜托了。”苏晚晴的声音里带上一丝恳求,这并不全是演技,“送花的人……可能是我一个很重要的朋友。我们失去了联系,但我有些话必须告诉他。如果真的是他,如果他还记得我的生日,我想知道他现在好不好。”
店主敲键盘的手指停了下来。她沉默了几秒,叹了口气,抬头看向苏晚晴,眼神复杂。“姑娘,不是我不想帮你。但那位客人……他特意来过店里两次,第一次来订货,第二次来确认送达。他看上去……状态不太好,很沉默,付了钱,只说了一句‘请务必准时送到’,别的什么都没说。我问他卡片上写什么,他给了我这个。”
她从柜台抽屉里翻出一张纸条,复印件,上面正是一串字符:S7-15-18-18-25-20-15-12-15-19-5-1-14-4-19-5-5-25-15-21
第七张卡片的代码。
“他让我原样打印,不要多问。”店主将纸条推过来,“我能说的就这么多了。再多,就真的违反规定了。”
苏晚晴接过纸条,指尖微微颤抖。她看着那熟悉的字符组合,眼前仿佛浮现出纪寒川站在柜台前,沉默地写下这串代码的样子。他当时在想什么?在监狱里计划着这一次的“生日祝福”时,又在想什么?
“他右手虎口……”她不死心地问。
店主这次坚定地摇了摇头:“这个我不能说。姑娘,如果你真的认识他,应该知道怎么找到他。我只能告诉你,他看起来……很孤单。送花的时候,一点高兴的样子都没有,反而像是完成一件很沉重的事情。”
很沉重的事情。
苏晚晴道了谢,走出花店。夜晚的风有些凉,她裹紧风衣,站在路边,看着车流穿梭。
线索在这里几乎断了。店主出于职业道德,或者出于对纪寒川某种承诺的遵守,不肯透露关键细节。但她确认了几件事:送花人是男性,年轻,状态不好,而且特意要求保密。
是纪寒川的可能性,又增加了几分。
但还不够。她需要更确凿的证据,需要将那些代码与纪寒川直接联系起来。
她回到车上,没有立刻发动,而是再次拿出手机,看着第七张卡片的照片。S7-15-18-18-25-20-15-12-15-19-5-1-14-4-19-5-5-25-15-21
S7。S是第19个字母。7呢?第七年?
她脑海中再次闪过那本《星辰的隐喻》。如果纪寒川真的用那本书作为密码本,那么密钥可能就在书里。但怎么用?书有近三百页,难道要一页页试?
不,纪寒川不会设计一个他自己都无法轻松编码和解码的系统。一定有一个简单、只有他们两人可能知道的密钥。
她发动车子,驶向回家的方向。路上经过一家大型书店,她犹豫了一下,还是将车拐进了停车场。
书店的计算机图书区,她找到了几本关于古典密码和现代密码基础的书。站在书架前快速翻阅,试图找到灵感。替换密码、置换密码、维吉尼亚密码、希尔密码……每一种都有特定的加密方式。
她的目光停留在一本《趣味密码学》上,翻开第一章,讲的是“恺撒密码的变体”——移位密码。原理简单:将字母按字母表顺序移动固定位置。比如移动3位,A变成D,B变成E。
但纪寒川的代码里有数字。难道数字代表移位数?可每组的数字不同。
除非……数字本身就是明文的一部分,代表未加密的字母位置?
她拿出纸笔,靠在书架上快速演算。假设字母是密钥指示,数字是需要解密的密文。以第一组为例:R1-18-9-19-1
如果R代表向右(Right)移位?1代表移1位?那么18-9-19-1这些数字,如果每个减去1……
18-1=17=R9-1=8=H19-1=18=R1-1=0?不对,字母表从1开始。
她皱眉。方向可能对了,但细节有问题。
继续尝试。如果R代表某种特定的替换表?比如以R开头的字母表重排?
时间一分一秒过去,书店的广播响起闭店提醒。苏晚晴将书放回书架,揉着发疼的太阳穴走出书店。
夜晚的城市灯火辉煌,却照不亮她心中的迷雾。
开车回家的路上,等红灯时,她无意间瞥见路边广告牌上的一行宣传语:“用代码书写未来”。
代码。
纪寒川的专业是计算机科学。他看待世界的方式,很可能带着程序员的思维。如果他要设计一个密码,一定会选择对他而言最自然、最直接的方式。
程序员的思维……数组?索引?从0开始?
从0开始!
苏晚晴猛地抓住方向盘。大多数编程语言中,数组的索引是从0开始的,而不是1。A=0,B=1,C=2……Z=25。
如果按照这个规则……
她将车靠边停下,迫不及待地再次拿出纸笔。
第一组代码:R1-18-9-19-1
假设R不是密钥,而是密文的一部分?那么整个字符串可能都是密文。
如果每个字母和数字组合代表一个字母:R=17(从0开始),1=?18=?等等,不对,数字太大。
她尝试另一种思路:也许字母和数字需要分开看。字母代表加密方式,数字是密文。
比如R可能代表“反向”(Reverse)?那么数字序列18-9-19-1反向就是1-19-9-18,对应字母A-S-I-R?无意义。
或者R代表“行”(Row)?像矩阵密码?
挫败感再次袭来。她觉得自己像个在迷宫里打转的盲人,明明知道出口就在某处,却摸不到正确的墙壁。
手机响起,是母亲打来的电话,问她最近怎么样,怎么好久没回家吃饭了。
苏晚晴敷衍了几句,挂断电话。看着手机屏幕上自己疲惫的倒影,突然感到一阵深深的无力。
四年了。纪寒川用四年时间守住一个秘密。她用几个小时,就想轻易揭开吗?
但下一秒,她又挺直了脊背。
不,不能放弃。如果连她都放弃了,那么纪寒川四年的沉默和牺牲,就真的成了毫无意义的沉没成本。她必须知道真相,必须弄清楚那个夜晚究竟发生了什么,必须确认那些玫瑰究竟来自谁手。

