星期一, 十月 23, 2006

DES加密BMP图像(ECB模式)

刚刚吃了玉表煮的粥,呵呵,好吃好吃~~吃完晚饭,继续调程序,总算是把DES的ECB加密基本完成了。

其实写程序的时候遇到很多奇怪的问题,一开始用的开发平台是C++ Builder 6,写完程序一运行,结果不对,意料之中,开始Debug……

由于这次要求加密的是BMP文件,不太好单步跟踪,想了一下,决定先用一个8*1像素的图片来试试(用什么来建立这个图像文件呢?……又想了半天,最后还是有劳PhotoShop大驾,真有大材小用的感觉)。单步跟进去一看,奇怪了,图像第一个像素的RGB值本应是3个字节,结果读出来竟然丢失了前两个字节。分析了一下,难道是图像头部信息读取错误?加上两行测试代码,输出一看,吓得我一身冷汗——C++ Builder输出的BITMAPFILEHEADER的大小居然是16个字节!正常的BMP文件头应该是14个字节才对啊!这么玩的话加密的时候少两字节,解密的时候又少两字节,要是还能解回来那才真是奇哉怪也~换到Visual C++ 6的编译环境,输出BITMAPFILEHEADER的大小,确实是14字节无误。再回C++ Builder,为了保险起见新建了一个文件检查,输出的文件头还是16字节……郁闷……上网查了一下,没搜到什么结果。换用VC编译几乎是不可能的,因为前段时间用C#写.NET的实验写得兴起,现在我的程序里面到处都是for(int i=0; i=n; i++)之类的东西(DES程序里面循环又特别多,主要代码部分80%以上都是for循环), VC6似乎刚好不支持这部分的C++标准……

没办法,Visual Studio 2005已经卸了,幸好还有Dev-C++,编译一下程序,通过,检查BMPFILEHEADER大小,16字节。好了!继续调试吧!可是……我以前怎么没发现这个东西用的调试工具居然是GDB?嗯,我个人对命令行模式并不排斥,可是,现在时间紧迫,似乎不是装高手的时候……我可从来没用过gdb啊~~!被微软宠坏了,自从不用DOS以来就渐渐习惯图像化的环境了……由此可见微软害人不浅,要是我一直用Linux现在哪来那么多麻烦事……老办法,上网找使用帮助……幸好我对命令行模式不算太陌生,稍微看了一下,足够对付面前这个小小程序了……

……

…………

………………

大功告成——

哼哼,看不出这是什么了吧?什么?看出Google了?这个……这个,咳咳,ECB加密模式的弱点,我也没办法,图像中如果有大量相同的颜色,加密时就会被加密成一样的信息……我们来看看原图:

要是用CBC模式加密的话,效果应该就好多了,不过程序还没写完……

2 条评论:

  1. haha~~~建议你用别的图片试一下,要是也能看出来是啥的话。。嘿嘿
    我还以为你的图是别的转化成google的呢~
    傻子

    回复删除
  2. 名字也加了密 HOHO~~
    看起来还是蛮帅滴~

    回复删除