|
怎样设计好自己的加密软件(1)
加密数据最重要的是密匙的设计而并不是算法的细节,一个好的加密程序的安全性应只与它的密匙有关,而与它的算法无关,但话又说回,如果算法不好,这将会给破译者制造很多机会。由于密匙的设计要涉及到许多深奥的数学问题,所以在这里我们不予讨论密匙的设计。 接下来,我们将围绕着怎样设计好一个的加密软件来讨论以下几个问题,如大家有不同的看法或更好的建议欢迎一同讨论,我的E-Mail 是 liuwenbin_1@sohu.com 一、算法: 目前的加密软件五花八门,什么算法都有,但大部分都不是采用公开算法。而是软件作者自行设计的。这些算法可以说大部分是非常脆弱的,只能用来防一般的用户,有的软件则使用了非常简单的算法,如果以为隐瞒自己算法的细节,就可瞒天过海那就大错特错了,破译者稍具密码学知识就可轻易破解它。而根本用不着反汇编。从表面上看, 被各种加密软件加密过的文件好像效果都差不多,就是把源文件的内容转换成乱码,这就是所谓的密文,但如果的密文与源文件的对应关系非常明显的话,那么破译者可能一眼就可识破,下面给出一段源程序,使用16位密匙算法(只是为了说明问题,所以使用的算法非常简单), void Encrypt(LPSTR buffer/*字符的缓冲*/, char PassWord[]/*密码*/) { UINT PWLen=strlen(Password); // 密码的长度 UINT BYTELen=strlen(buffer); // 缓冲的大小 UINT i=0; int j=-1; for (; i<BYTELen; i++) { if (j==PWLen-1) j=-1; // 生成密匙种子 buffer[i]=(~buffer[i])^Password[j++]; // 逐个加密字符 } TRACE0 ("Encrpyt OK!"); } 以上算法稍做修改就可在自己的软件中实现,且速度非常的快,其特点是密码越长生成的密文越混乱,且加密与解密使用相同的算法。但它只使用了"密文混乱"并未使用"密文扩散"(加密的基本技术其实就是"混乱"与"扩散"的组合,"混乱"指用另外一个字符来代替原来的字符,"扩散" 指打乱文件中字符的存储位置),如算法只使用了以上两种方法中的其中一种可以说是不够安全的,所以生成的密文要同时应用 "混乱"与"扩散"。我们将修改源程序,使它也具有"扩散"的功能。程序修改如下 : void Encrypt(LPSTR buffer/*字符的缓冲*/, char Password[]/*密码*/) { UINT PWLen=strlen(Password); // 密码的长度
|