这个是那位朋友提出来的算法的核心:

char g_szSeed[5/**//*26*/] =
{
'a', 'b', 'c' ,'1', '2',
}; 

BOOL Compress(LPCSTR lpstrSrc, LPSTR lpstrDen, unsigned long lLen)
{
_ASSERT(lLen > 0); 
size_t nSeedCount = sizeof ( g_szSeed ) / sizeof(char); 

for(unsigned long i = 0 ; i < lLen; ++i )
{
char chCurSeed = g_szSeed[i % nSeedCount]; 
if(*(lpstrSrc + i))
*(lpstrDen + i) = (chCurSeed ^ *(lpstrSrc + i));
else
*(lpstrDen + i) = *(lpstrSrc + i); 
} 

return TRUE;
} 他写的是C++代码,我对这个进行了一定的转化,变成了C#的形式。然后对这个加密算法加密出来的密文进行攻击,攻击的时候完全不知道密钥的长度及内容,也不涉及加密算法代码本身(当然会涉及到该加密算法的相关知识)。因此破解过程还是相当的公正的。
想知道我怎么进行破解的吗?点击这里可以下载源程序(当然也包括破解程序)。
运行过我的程序,你应该会发现原来破解“简单异或”加密算法是一件多么容易的事情了:一天的编码时间(从完全没有这方面经验开始),加上几秒钟都不到的运行时间,一切就搞定了。
打印 | 张贴于 2004-08-06 21:48:00 | Tag:.NET 技术内幕 其他

留言反馈
要完全保密
就用one pad咯
呵呵
但是都是要付出代价的
呵呵
只能是在一定时间内安全,这就足够了。。。
所以要多用脑子,单纯的XOR加密肯定不安全,
但只要稍微加此致料相信就很难被破解了。。。
比如加密的同时用密码打乱文件顺序,
最简单的还有根据密码生成无用字符插进加密后的文件,
这样别人不知你的加密方法,基本通过分析加密文件是不大可能分析出来的...
许多时候还会加上其他的东西;
或者是墨中加密算法在加上xor
总的说, 一般应用, xor是最高效, 简单的用法;
你不能一棒子打死;
很多专家都觉的加密中用到xor是不错的;
当不能仅仅用xor;
我不知道您的语文或者道德是否有点问题,希望下次在这里不要作出:
1、人身攻击
2、到处留脏话
这里是一片很干净的地方,这里是我的家。您愿意在您的blog里面怎么进行人身攻击我无所谓,也耐你不何。不过你既然来到我这里留言,还请您说话稍微干净一点。
现在回答您的问题:
实际上您根本没有仔细看我的注释,如果您看过了,那么请您再次仔细看一遍,琢磨琢磨。在这个例子里面仅仅是为了代码简单一点,直接分析原始明文的。如果你无法做出明文攻击,完全可以统计类似的范本。比如你用XOR加密某个C#文件,我现在想破解你这个文件。我没有你的密钥,更没有你的明文。但是我可以用其他C#文件来代替CountingPlainText里面所使用的文件,甚至用多个文件来进行统计。只要他们是同一类型的文件,那么统计特征应该是非常的近似的。这样我就可以还原你的密钥,进而还原你的明文。当然,由于不是原始明文,你需要更加小心地进行分析。这个时候也许需要分析多个BlendToken,来确保密钥被成功破解的成功率。
其实我怀疑我说了这么半天,您还是不会仔细去思考问题本身的,我想您会继续花时间挑出这里面的毛病。如果是那样的话(当然,我不希望是真的),那就算了,因为这对于我来说毫无意义。我并没有用我的观点来跟你讨论,而是用Bruce Schneier的书来跟你讨论问题,希望能够跟你讨论一下这个事实。因此实际上你应该找Bruce Schneier来理论,你告诉他见单异或加密方法是安全可靠的,这种简单的方法他根本就破译不了,他说用几秒钟就能够破译,甚至不需要计算机也能够破译是瞎吹。
我同样怀疑您以为我从一开始写密码的那篇Post起就是针对您的,如果是那样的话我要声明一下,我并没有针对任何人,我只是在看完豆腐的那个Post之后有感而发,甚至连里面的Comment都没有仔细看,也没有注意到您的发言。而且事实上鞠强也说到异或加密方法,我的第二、三个Post也没有明白着是针对您的。只是后来看到您把具体的代码贴出来了,还声称破解不了。那我当然不会放弃这么一个有趣的挑战,顺便验证一下Bruce Schneier的理论是否正确。也许第四个Post,也就是这个,确实是因为您的回复而引起的,但是我也并没有想针对您。不知道您注意到没有,我说的是“和一位朋友”争论,而并没有说是“和一只苍蝇”或者别的什么难听的话。事实上我希望我的Post能够让所有认为异或加密算法安全的人得到切实的、亲身的感受,得到一个警示,学到这么一个知识,这样我就很开心了。如果您还是坚持简单异或加密算法安全可靠,我只能够表示惋惜,我已经尽我所能,将所有我能够解释的问题说出来了。
但愿您会快乐。
不过苍蝇把.net framework用得真鸡巴熟啊,很多类的method我还没用过呢。