随笔 - 59, 评论 - 580, 引用 - 50

导航

工具

关于


微软提供的免费计数器

山不在高,有仙则名。水不在深,有龙则灵。斯是陋室,唯吾德馨。苔痕上阶绿,草色入帘青。谈笑有鸿儒,往来无白丁。可以调素琴,阅金经。无丝竹之乱耳,无案牍之劳形。南阳诸葛庐,西蜀子云亭。
子曰∶“何陋之有?”


My name is BEN.
This is my master's "doghouse". hehe...

标签

每月存档

广告



访客

 
简单异或实际上是非常的危险的,这个知识是在书上看到的。最近跟某位朋友进行了这方面的争论,因此我突然对这个问题非常感兴趣。其实之前我也没有任何密码学分析的经验,更没有写过相关的程序。今天也就花了一天的时间,就把整个破解程序给写出来了。
这个是那位朋友提出来的算法的核心:
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 技术内幕  其他

留言反馈

#dfgfds 编辑
2008-03-26 10:36:56 | [匿名用户:cxb000]
#回复: 看!我写的关于“简单异或”加密的破解分析演示程序! 编辑
2007-12-18 04:56:00 | [匿名用户:runescape gold]
#re: 看!我写的关于“简单异或”加密的破解分析演示程序! 编辑
楼主你好能试用一下软件吗,我的邮箱是fengyungzs@yahoo.com.cn
2006-03-29 15:29:00 | [匿名用户:过客]
#re: 看!我写的关于“简单异或”加密的破解分析演示程序! 编辑
呵呵
要完全保密
就用one pad咯
呵呵
但是都是要付出代价的
呵呵
2006-01-12 05:38:00 | [匿名用户:JA]
#re: 看!我写的关于“简单异或”加密的破解分析演示程序! 编辑
什么加密算法都没有决对安全这一说法,
只能是在一定时间内安全,这就足够了。。。
所以要多用脑子,单纯的XOR加密肯定不安全,
但只要稍微加此致料相信就很难被破解了。。。
比如加密的同时用密码打乱文件顺序,
最简单的还有根据密码生成无用字符插进加密后的文件,
这样别人不知你的加密方法,基本通过分析加密文件是不大可能分析出来的...
2005-12-22 17:19:00 | [匿名用户:诗诺比]
#re: 看!我写的关于“简单异或”加密的破解分析演示程序! 编辑
我是一个无意经过的游客。我的看法和我楼上的差不多,我是用C的。只要再改动一下,应该是不是那么容易破解的。谁也保证不了绝对的安全,微软也逃不了被破解的危险,何况我们了!!只要做到让自己满意就可以了。你说呢!!
2005-04-21 15:00:00 | [匿名用户:路人甲]
#re: 看!我写的关于“简单异或”加密的破解分析演示程序! 编辑
搂主你好,我是无意中来到这里的一个过客。碰巧的是,我也是费常喜欢用异或对数据加密。但我用的是vf,对于你们的代码看的不是很懂。但不管用的是那种语言,其加密原理是一致的。我认为,只要加密算法设计的完美将无法破解。讲一下我最常用的一种算法:(需要说明的是,由于语言限制,并为了方便,我的密码都是数值型的)由密码取得随机数的起点,并得到第一个随机数。根据这个随机数条取跳到另外一个随机数,并用第二个数技术对明文的第一个字节进行异或运算,并根据的二个随机数跳到第3个随机数,对明文的第2个字节进行异或运算........这样一直到全部明文加密完毕。用异或算法对数据加密,只要对算法稍微改动一下,就很难作出破解。在没有明确加密的算法的偏题下,暴力破解根本么法使用。
2005-04-19 11:48:00 | [匿名用户:gameover]
#re: 看!我写的关于“简单异或”加密的破解分析演示程序! 编辑
媽的一群垃圾打一架呀媽的
2005-02-26 14:52:00 | [匿名用户:LE NI]
#re: 看!我写的关于“简单异或”加密的破解分析演示程序! 编辑
其实xor的用法不止这么简单;
许多时候还会加上其他的东西;
或者是墨中加密算法在加上xor
总的说, 一般应用, xor是最高效, 简单的用法;
你不能一棒子打死;
很多专家都觉的加密中用到xor是不错的;
当不能仅仅用xor;
2004-12-07 16:45:00 | [匿名用户:llbird]
#re: 看!我写的关于“简单异或”加密的破解分析演示程序! 编辑
@leighsword:

我不知道您的语文或者道德是否有点问题,希望下次在这里不要作出:
1、人身攻击
2、到处留脏话

这里是一片很干净的地方,这里是我的家。您愿意在您的blog里面怎么进行人身攻击我无所谓,也耐你不何。不过你既然来到我这里留言,还请您说话稍微干净一点。

现在回答您的问题:
实际上您根本没有仔细看我的注释,如果您看过了,那么请您再次仔细看一遍,琢磨琢磨。在这个例子里面仅仅是为了代码简单一点,直接分析原始明文的。如果你无法做出明文攻击,完全可以统计类似的范本。比如你用XOR加密某个C#文件,我现在想破解你这个文件。我没有你的密钥,更没有你的明文。但是我可以用其他C#文件来代替CountingPlainText里面所使用的文件,甚至用多个文件来进行统计。只要他们是同一类型的文件,那么统计特征应该是非常的近似的。这样我就可以还原你的密钥,进而还原你的明文。当然,由于不是原始明文,你需要更加小心地进行分析。这个时候也许需要分析多个BlendToken,来确保密钥被成功破解的成功率。

其实我怀疑我说了这么半天,您还是不会仔细去思考问题本身的,我想您会继续花时间挑出这里面的毛病。如果是那样的话(当然,我不希望是真的),那就算了,因为这对于我来说毫无意义。我并没有用我的观点来跟你讨论,而是用Bruce Schneier的书来跟你讨论问题,希望能够跟你讨论一下这个事实。因此实际上你应该找Bruce Schneier来理论,你告诉他见单异或加密方法是安全可靠的,这种简单的方法他根本就破译不了,他说用几秒钟就能够破译,甚至不需要计算机也能够破译是瞎吹。

我同样怀疑您以为我从一开始写密码的那篇Post起就是针对您的,如果是那样的话我要声明一下,我并没有针对任何人,我只是在看完豆腐的那个Post之后有感而发,甚至连里面的Comment都没有仔细看,也没有注意到您的发言。而且事实上鞠强也说到异或加密方法,我的第二、三个Post也没有明白着是针对您的。只是后来看到您把具体的代码贴出来了,还声称破解不了。那我当然不会放弃这么一个有趣的挑战,顺便验证一下Bruce Schneier的理论是否正确。也许第四个Post,也就是这个,确实是因为您的回复而引起的,但是我也并没有想针对您。不知道您注意到没有,我说的是“和一位朋友”争论,而并没有说是“和一只苍蝇”或者别的什么难听的话。事实上我希望我的Post能够让所有认为异或加密算法安全的人得到切实的、亲身的感受,得到一个警示,学到这么一个知识,这样我就很开心了。如果您还是坚持简单异或加密算法安全可靠,我只能够表示惋惜,我已经尽我所能,将所有我能够解释的问题说出来了。

但愿您会快乐。
2004-08-09 23:54:00 | [匿名用户:sumtec]
#re: 看!我写的关于“简单异或”加密的破解分析演示程序! 编辑
CountingPlainText()里的byte[] textBuff = Encoding.Unicode.GetBytes(txContext.Text);语句是对明文操作,如果没有明文的话就没有plain数组。

不过苍蝇把.net framework用得真鸡巴熟啊,很多类的method我还没用过呢。
2004-08-09 17:16:00 | [匿名用户:leighsword]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode MVC Blogger System