平心而论,这段代码写得不怎么样。估计这位同事当时已经心不在焉了,只想早早结束了事吧。代码中充满了他此前做过的一个BCB项目的风格,主要的功能是用C风格的代码来实现(例如文件读写等),而工程又是一个VC6的Win32 DLL,里面写了自己的类等等。我看了之后第一感觉就是想推了重写,好不容易才压制住这种想法。
当时我给自己安排了两天来接收并改造这些代码,后来拖长到了三四天。其实现在想想还不如重构。给我的代码功能测试都通不过,里面Bug一大堆。我这人又是有一点代码洁癖的家伙,遇到空格缩进什么的都忍不住花时间去调。最后终于弄好了,真有点不想再去碰了,虽然我知道值得改进的地方还很多。
结果今天就碰到了一个藏在其中的Bug。
这个日志模块被设计为保存加密日志,目的嘛……是为了防止用户抵赖。加密就不能全文加密,否则每来一条日志都得解密再加密,量稍微一大就死翘翘了。差分加密是必须的。设计的时候是对每一条日志的内容进行加密,只留下必要的信息放在每一条的头部以便索引。从性能和安全性方面权衡,当时选择了AES算法。
代码交到我手上时,之前那个同事大概已经从网上找了一段AES算法封装好了。既然能实现加密解密的功能,我也就没往里面细看。谁知道这玩意儿是线程不安全的。今天专拣双核机器报错,从fseek到fopen查了一圈,终于怀疑到这个AES算法上。浪费了约两个小时时间。
我估计我有时间可能真得把它给重写了,里面指不定还有什么问题。
没有评论:
发表评论