问题 单项选择题

两个公司希望通过Intemet进行安全通信,保证从信息源到目的地之间的数据传输以密文形式出现,而且公司不希望由于在中间节点使用特殊的安全单元而增加开支,最合适的加密方式是(1),使用的会话密钥算法应该是(2)。 空白(1)处应选择()

A.链路加密

B.节点加密

C.端.端加密

D.混合加密

答案

参考答案:C

解析:

本题考查数据传输加密的方式。常见的数据传输过程中的加密方式有端.端加密、链路加密和节点加密三种。(1)端.端加密方式采用端.端加密方式允许数据在从源点到终点的传输过程中始终以密文形式存在,只是发送方加密报文,接收方解密报文,中间节点不必加、解密,也就不需要密码装置。

在端一端加密方式下,每对用户之间都存在一条虚拟的保密信道,每对用户应共享密钥(传统密码保密体制,非公钥体制下),所需的密钥总数等于用户对的数目。对于几个用户,若两两通信,共需密钥n×(n-1)/2种,每个用户需n-1种。这个数目将随网上通信用户的增加而增加。

(2)链路加密方式采用链路加密方式,从起点到终点,要经过许多中间节点,在每个节点均要暴露明文(节点加密方法除外),如果链路上的某一节点安全防护比较薄弱,那么按照木桶原理,虽然采取了加密措施,但整个链路的安全只相当于最薄弱的节点处的安全状况。

链路加密,每条物理链路上,不管用户多少,可使用一种密钥。在极限情况下,每个节点都与另外一个单独的节点相连,密钥的数目也只是,n×(n-1)/2种。这里n是节点数而非用户数,一个节点一般有多个用户。

(3)节点加密采用节点加密方式不允许消息在网络节点以明文形式存在,它先把收到的消息进行解密,然后采用另一个不同的密钥进行加密,这一过程是在节点上的一个安全模块中进行的。端一端加密方式的价格便宜些,与链路加密和节点加密相比更可靠,更容易设计、实现和维护。端.端加密方式使用的会话密钥算法是RC-5,它是一种基于RSA算法开发的对称加密算法。

多项选择题
问答题

【说明】在一公文处理系统中,开发者定义了一个公文结构OfficeDoc,其中定义了公文应该具有的属性。当公文的内容或状态发生变化时,与之相关联的DocExplorer结构的值都需要发生改变。一个OfficeDoc结构能够关联一组DocExplorer结构。当OfficeDoc结构的内容或状态发生变化时,所有与之相关联的DocExplorer结构都将被更新,这种应用被称为观察者模式。以下代码采用C语言实现,能够正确编译通过。【代码13-4】# include<stdio.h># define OBS_MAXNUM 20 /*一个OfficeDoc变量最多能够关联的DocExplorer变量的个数*/typedef void( (1) )(struc OffieeDoc*, struct DoeExplorer*)I;struct DocExplorer{ func update;/*DocExplorer结构采用的更新函数*/ /*其它的结构字段省略*/ };struet OffieeDoc{ (2) myObs[OBS_MAXNUM

; /*存储所有与OfficeDoc相关联的DocExplorer结构指针*/ int index;/*与OffieeDoc结构变量相关联的DoeExplorer结构变量的个数*/};void attaeh(struct OfficeDoc*doc, struct DocExplorer*ob){ /*关联Observer结构ob与OffieeDoe结构doe*/ int loop=0; if(doc->index>=OBS_MAXNUM||ob==NULL)return; for(loop=0, loop<doc->index; loop++) if(doc->myObs[loop]==ob)return; doc->myObs[doe->index]=ob; doc->index++;}void detaeh(struct OfficeDoc*doc, struct DocExplorer*ob){ /*解除doc结构与ob结构间的关联*/ int loop; if(ob==NULL)return; for(loop=0;loop<doc->index; loop++){ if(doe->myObs[loop]==ob){if(loop<=doc->index-2) doc->myObs[loop]=doc->myObs[ (3) ];doc->myObs[doc->index-1]=NULL;doc->index——;breack; } }}void updatel(struct OfficeDoe*doe, struct DoeExplorer *ob){/*更新ob结构的值,更新代码省略*/} void update2(struct OffieeDoc*doc,struet DocExplorer *ob){/*更新ob结构的值,更新代码省略*/}void notifyObs(struct OfficeDoc* doc){ /*当doc结构的值发生变化时,通知与之关联的所有DocExplorer结构变量*/ int loop; for(loop=0; loop<doc->index; loop++){ (doc->myObs[loop

)->update( (4) ); }}void main(){ struct OfficeDoc doc; /*定义一了OfficeDoe变量*/ struct DocExplorer explorer1, explorer2; /*定义两个DocExplorer变量*/ /*初始化与OfficeDoc变量相关的DocExplorer变量个数为0*/ doc.index=0; explorer1.update=update1; /*设置explorer1变量的更新函数*/ explorer2. update=update2; /*设置explorer2变量的更新函数*/ attach(&doc, &explorer1); /*关联explorer1与doc对象*/ attach(&doc, &explorer2); /*关联explorer2与doc对象*/ /*其它代码省略*/ (5) ; /*通知与OfficeDoe相关的所有DoeExploer变量*/ return;}