.NET 安全编程 阅读笔记(四)
2009-03-01 13:35
281 查看
散列算法
加密很重要的一个应用就是保证数据的完整性,Alice想要给Bob发送消息,但是又考虑到Eve可能会截获并破坏或篡改该消息,在这种情况下,也许Alice并不在乎Eve能否得到想消息的内容,但她会考虑Bob是否知道自己得到的消息是Alice想要发给他的消息。 这个时候,Alice可以为她创建的消息建立散列码,该代码是基于消息内容的。对消息的任何改动都会导致不同的散列码,于是Alice将消息和散列码一同发给Bob。Bob收到消息后,会使用和Alice相同的技术为收到的消息创建散列码,如果他的散列码和Alice发给他的散列码一致,则Bob就可以断定这个消息并没有被更改过。
散列算法创建了一个散列码,也可以称作消息指纹,为一个消息提供完整性标识。
创建散列码
散列算法的核心是一个数学函数,在两个固定大小的数据块中运行它可以创建一个散列码,于是我们基于此,可以为Alice的消息创建散列码。我们可以将Alice的消息分成和散列函数输入的大小一样的块,每个数据块的大小因算法而不同,但是最好将块分得小一些,(.NET Framework包括的算法将消息分成512或1024位的块),虽然每个散列算法的散列函数设计不同,但是他们的基本方法是一样的,算法指定了一个“种子”值,将该值的第一块消息数据一同载入散列函数,这样就生成了第一个散列码,同理,将这个散列码和第二块消息数据一同载入散列函数,生成第二个散列码,依次进行下去,指导处理完所有的消息数据。由此可见,对于原始信息的微小改动,可能会由于连锁反应而使得生成的散列码有很大的不同。
加密很重要的一个应用就是保证数据的完整性,Alice想要给Bob发送消息,但是又考虑到Eve可能会截获并破坏或篡改该消息,在这种情况下,也许Alice并不在乎Eve能否得到想消息的内容,但她会考虑Bob是否知道自己得到的消息是Alice想要发给他的消息。 这个时候,Alice可以为她创建的消息建立散列码,该代码是基于消息内容的。对消息的任何改动都会导致不同的散列码,于是Alice将消息和散列码一同发给Bob。Bob收到消息后,会使用和Alice相同的技术为收到的消息创建散列码,如果他的散列码和Alice发给他的散列码一致,则Bob就可以断定这个消息并没有被更改过。
散列算法创建了一个散列码,也可以称作消息指纹,为一个消息提供完整性标识。
创建散列码
散列算法的核心是一个数学函数,在两个固定大小的数据块中运行它可以创建一个散列码,于是我们基于此,可以为Alice的消息创建散列码。我们可以将Alice的消息分成和散列函数输入的大小一样的块,每个数据块的大小因算法而不同,但是最好将块分得小一些,(.NET Framework包括的算法将消息分成512或1024位的块),虽然每个散列算法的散列函数设计不同,但是他们的基本方法是一样的,算法指定了一个“种子”值,将该值的第一块消息数据一同载入散列函数,这样就生成了第一个散列码,同理,将这个散列码和第二块消息数据一同载入散列函数,生成第二个散列码,依次进行下去,指导处理完所有的消息数据。由此可见,对于原始信息的微小改动,可能会由于连锁反应而使得生成的散列码有很大的不同。
相关文章推荐
- .net安全编程 阅读笔记(三)
- .net安全编程 阅读笔记(二)
- .NET安全编程 阅读笔记
- .NET 安全编程 阅读笔记(五)
- 《深入理解ES6》阅读笔记 --- Promise与异步编程
- 垃圾回收编程--ms.net文档阅读笔记
- Java编程思想阅读笔记(一)
- java编程思想阅读笔记 第二章
- 【阅读笔记之一】《DIRECTX.9.0.3D游戏开发编程基础》:DirectX概略
- UNIX环境高级编程(阅读笔记)——线程属性
- java 编程思想阅读笔记(4)
- 深入.NET平台和C#编程 第三章 学习笔记
- 【阅读笔记之十二】《DIRECTX.9.0.3D游戏开发编程基础》:网格(二)浅话X文件和渐进网格
- <<JavaScript编程全解>>阅读笔记之javascript基础
- 【unix网络编程第三版】阅读笔记(二):套接字编程简介
- .Net多线程与Windows Forms编程笔记
- 【阅读笔记之八】《DIRECTX.9.0.3D游戏开发编程基础》:Direct3D中的纹理与映射
- UNIX环境高级编程(阅读笔记)---多线程信号
- Unix环境高级编程(阅读笔记)-----kill、raise、alarm、pause函数
- shell基础十二篇 阅读笔记 shell基础1:文件安全与权限