整体设计思想:
不管是加密还是解密,根本思路就是对源文件中的内容根据某种算法进行变换,用变换后的内容覆盖原来的内容,从而达到加解密的目的。在这个程序中按照要求对文件加解密用的是3DES算法,具体的DES算法在课本上有详细的描述。DES综合运用了置换、代替、代数等多种密码技术,它设计精巧、实现容易、使用方便,是适应计算机环境的近代传统密码的一个典范。它有以下特点1.DES是一种分组密码。明文、密文、密钥的分组长度都是64位。2.DES是一种面向二进制的密码算法,因而能够加解密任何形式的计算机数据。3.DES是对合运算,因而加密和解密公用一算法,使工程实现的工作量减半。
现在只对它运用到对文件加解密这个问题上涉及到的问题做简单的分析
1. 大家知道,DES的明文长度是64位的0或1,是个二进制数字。而在计算机上用程序直观的实现这64位的处理,最好将0或1分别作为一个字节来处理,在C语言里用char数据类型。这样程序实现起来也比较简单。
2.对文件进行加解密的时候,考虑到DES算法中明文的长度是8个字节,所以把文件划分为若干块,每块大小为8字节,加解密的时候每次读出8个字节,因为前面已经说过0或1是按照一个字节来处理的,所以先要将这8个字节转化为64个字节,把原来的每一个位都用一个字节来存储。这样就可以调用已经设计好的3DES算法,当然结果也是64字节但往文件里写的是8个字节,所以还需要将这64个字节转化成8个字节,然后写入文件覆盖源文件的内容。
3 当然由于文件长度不一定是8的倍数,所以会出现短块,就得考虑短块处理的问题。
该程序用的是密文挪用技术。因为分组密码一次只能对一个固定长度的明文(密文)块进行加(解)密,而对长度小于分组密码长度的明文(密文)块不能正确地加(解)密,就存在短块怎么处理的问题。该软件采用了密文挪用技术,这种方式不会引起数据的扩展,缺点是控制上有点复杂。
4 同时,考虑到计算机系统中由于数据冗余和数据结构而使数据具有某种固有模式,还采用了密文反馈链接方式。这种连接方式中,明文不参加链接,只让密文参与链接。这样使得在解密的时候错误传播是有界的。(该程序中已经设定初始向量为0)。
5.考虑到DES存在弱密钥,该程序采用的3DES。3DES采用2密钥或3密钥,完全能够抵抗穷举攻击。3DES的底层算法与DES相同而且不存在弱密钥。该软件使用的是2密钥3DES技术。