IP Sec中的加密机制是通过IKE来实现的,在看《IPSec及IKE原理》的时候对哈希算法和Diffie-Hellman密钥交换算法有点不太清楚,就到网上找了找关于这两个算法的文章。
哈希(Hash)值
哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。
哈希算法是一类符合特殊要求的散列函数(Hash)函数,这些特殊要求是:

接受的输入报文数据没有长度限制;
对任何输入报文数据生成固定长度的摘要("数字指纹")输出;
由报文能方便地算出摘要;
难以对指定的摘要生成一个报文,由该报文可以得出指定的摘要;
难以生成两个不同的报文具有相同的摘要。
Diffie和Hellman在其里程碑意义的文章中虽然给出了

密码的思想但是没有给出真正意义上的公钥密码实例也

没能找出一个真正带陷门的单向函数然而他们给出单向

函数的实例并且基于此提出Diffie-Hellman密钥交换算法

这个算法是基于有限域中计算离散对数的困难性问题之上

设F为有限域g F是F的乘法群F*=F\{0}=<g> 并且对

任意正整数x 计算gx是容易的但是已知g和y求x使y= gx

是计算上几乎不可能的这一问题称为有限域F上的离散对

数问题公钥密码学中使用最广泛的有限域为素域FP.

对Diffie-Hellman密钥交换协议描述Alice和Bob协商

好一个大素数p 和大的整数g 1<g<p p和g无须保密可

为网络上的所有用户共享

当Alice和Bob要进行保密通信时他们可以按如下步骤来做

(1)Alice选取大的随机数x 并计算X=gx(mod P)

(2)Bob选取大的随机数x′ 并计算X ′ = gx ′(mod P)

(3)Alice将X传送给Bob Bob将X ′传送给Alice

(4)Alice计算K=(X ′)X(mod P);Bob计算K ′ X) X ′(mod P),

易见K=K ′ =g xx ′(mod P)

由(4)知Alice和Bob已获得了相同的秘密值K 双方以K作为

加解密钥以传统对称密钥算法进行保密通信
(在网上找到了一篇《SHA1算法告破》的文章,呵呵~ 这么安全的算法也会。。