收信人:Mark Wilson
寄信人:Dan Quick,Sales Manager
日期:January 25,2006
内容:本公司从纽约一个朋友处得知贵公司出口各种轻工业产品。本公司对贵公司手工制的真皮手套感兴趣。本地区对价格公道、质量好的手套有很大的需求。请寄一份手套的目录,并说明价格及付款条件,如能寄上制手套的皮质样品更好。
Words for reference:
真皮手套:genuine leather gloves
价格公道:moderate prices
付款条件:terms of payment
查看答案
Is your sister good at singing?
阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。
[说明]
某公司计划与客户通过Internet交换电子邮件和数据(以下统一称为“消息”)。为保障安全,在对传输的数据进行加密的同时,还要对参与通信的实体进行身份认证。因此,需同时使用对称与非对称密钥体系。图3-1描述了接收者B使用非对称密钥体系对发送者A进行认证的过程。
[图3-1]
图3-2描述了发送和接收消息的过程,其中的认证过程使用了图3-1中的方法。图3—1中的方框a和方框b与图3-2中的方框a和方框b相同。
[图3-2]
图3-2中发送和接收消息的过程是:
1)发送者A使用与接收者B共享的对称密钥体系的密钥加密将要发送的消息。
2)为了实现身份认证,A使用与B共享的摘要算法生成消息摘要,并使用公钥密码体系把生成的消息摘要加密后发送给B(这里假设A和B都能通过安全的方法获得对方的公钥)。
3)B使用非对称密钥体系解密收到的消息摘要,使用与A共享的对称密钥体系的密钥解密加密后的消息,再使用与A共享的摘要算法针对解密后的消息生成消息摘要。
4)B对比自己生成的消息摘要与接收到的A发送的消息摘要是否相同,从而验证发送者A的身份。
请在下列选项中选择合适的答案,填入图3-1、图3-2的方框a和方框b。
B的公钥,B的私钥,摘要算法,A的私钥,A的公钥,会话密钥
按照图3-2中的方法发送邮件时,使用不同的密码体制加密消息和消息摘要,请用 150字以内文字简要说明这样做的理由。
阅读以下说明和C代码,将应填入(n)处。
[说明]
在一公文处理系统中,开发者定义了一个公文结构OfficeDoc,其中定义了公文应该具有的属性(字段)。当公文的内容或状态发生变化时,与之相关联的DocExplorer结构的值都需要发生改变。一个OfficeDoc结构能够关联一组DocExplorer结构。当OfficeDoc结构的内容或状态发生变化时,所有与之相关联的DocExplorer结构都将被更新,这种应用被称为观察者模式。以下代码采用C语言实现,能够正确编译通过。
[C代码]
include <stdio.h>
define OBS_MAXNUM 20 /*一个OfficeDoc变量最多能够关联的*/
/*DoeExplorer变量的个数*/
typedef void((1))(struct OfficeDoc*,street DocExplorer*);
struct DocExplorer{
func update;/* DocExplorer结构采用的更新函数*/
/*其他的结构字段省略*/
};
struct OfficeDoc{
(2) myObs[OBS_MAXNUM];
/*存储所有与OfficeDoc相关联的DoeExplorer结构指针*/
int index;/*与OfficeDoc结构变量相关联的DocExplorer结构变量的个数*/
};
void attach(struet OfficeDoc *doc, struet DocExplorer *ob){
/*关联Obersver结构ob与OfficeDoe结构doc*/
int loop=0;
if(doc->index >=OBS_MAXNUM || b==NULL) return;
for(loop=0; loop <doc->index; loop++)
if(doc->myObs[loop]==ob)return;
doc->myObs[doe->index]=ob;
doc->index++;
)
void detach(struct OfficeDoc *doc, struct DocExplorer *ob){
/*解除doc结构与ob结构间的关系*/
int loop;
if(ob==NULL)return;
for(loop=0; loop <doc->index; loop6++){
if(doc->myObs[loop]==ob){
if(loop<=doc->index-2)
doe->myObs[loop]=doc->myObs[ (3) ];
doc->myObs[doe->indox-1]=NULL;
doe->index--;
break;
}
}
}
void updatel(struct OfficeDoc *doc,struct DocExplorer *ob){
/*更新ob结构的值,更新代码省略*/
}
void update2(stmct OfficeDoc *doc, struct DocExplorer *ob){
/*更新ob结构的值,更新代码省略*/
}
void notifyObs(struet OfficeDoc *doc){
/*当doc结构的值发生变化时,通知与之关联的所有DocExplorer结构变量*/
int loop;
for(loop=0; loop <doc->index; loop++){
(doc->myObs[loop])->update((4));
}
}
void main(){
stmct OfficeDoc doc;/*定义一OfficeDoc变量*/
struct DocExplorer explorer1, explorer2;/*定义两个DocExplorer变量*/
/*初始化与OfficeDoc变量相关的DocExplorer变量个数为0*/
doc.index=0;
explorer1.update=update1;/*设置explorer1变量的更新函数*/
explorer2.update=update2;/*设置explorer2变量的更新函数*/
attaeh(&doc,&explorer1);/*关联explorer1与doc对象*/
attach(&doc,&explorer2);/*关联explorer2与doc对象*/
/*其他代码省略*/
(5);/*通知与OfficeDoc相关的所有DocExplorer变量*/
return;
}