.NET 安全编程 阅读笔记(四)

散列算法

加密很重要的一个应用就是保证数据的完整性,Alice想要给Bob发送消息,但是又考虑到Eve可能会截获并破坏或篡改该消息,在这种情况下,也许Alice并不在乎Eve能否得到想消息的内容,但她会考虑Bob是否知道自己得到的消息是Alice想要发给他的消息。 这个时候,Alice可以为她创建的消息建立散列码,该代码是基于消息内容的。对消息的任何改动都会导致不同的散列码,于是Alice将消息和散列码一同发给Bob。Bob收到消息后,会使用和Alice相同的技术为收到的消息创建散列码,如果他的散列码和Alice发给他的散列码一致,则Bob就可以断定这个消息并没有被更改过。
散列算法创建了一个散列码,也可以称作消息指纹,为一个消息提供完整性标识。

创建散列码

散列算法的核心是一个数学函数,在两个固定大小的数据块中运行它可以创建一个散列码,于是我们基于此,可以为Alice的消息创建散列码。我们可以将Alice的消息分成和散列函数输入的大小一样的块,每个数据块的大小因算法而不同,但是最好将块分得小一些,(.NET Framework包括的算法将消息分成512或1024位的块),虽然每个散列算法的散列函数设计不同,但是他们的基本方法是一样的,算法指定了一个“种子”值,将该值的第一块消息数据一同载入散列函数,这样就生成了第一个散列码,同理,将这个散列码和第二块消息数据一同载入散列函数,生成第二个散列码,依次进行下去,指导处理完所有的消息数据。由此可见,对于原始信息的微小改动,可能会由于连锁反应而使得生成的散列码有很大的不同。

 

posted on 2009-03-01 13:35  blue-boy  阅读(185)  评论(0编辑  收藏  举报

导航