一种密码实验平台的设计方案的关键实现思路

来源:互联网 发布:网络的优缺点英语作文 编辑:程序博客网 时间:2024/06/06 04:01

对一个能够实际投入到教学工作中的密码实验平台的刻画将会涉及到一系列功能性、非功能性的细节的设计,在本章中我们忽略了实现中那些简单的或常见的功能设计,而是针对实现过程中各环节的关键技术要点进行设计,其中重点针对密码算法的建模思路进行了详细说明。

 image

 密码实验平台总体设计图(摘自前文)

 

  

 

 

1 密码实验平台的用户界面实现

根据设计,我们知道密码实验平台的界面需要综合密码设计环境及密码运行环境(包括密码验证、密码演示),并集成了密码知识体系的展现,因此相对比较复杂。本密码实验平台的用户界面边界类组织如下:

图 1 密码实验平台用户界面边界类组织结构图

在本节中我们对密码实验平台界面的构成以边界类的形式进行设计(见上图),从而清晰的刻画了界面上所包含的要素及各要素之间的构成关系。因为系统管理任务相对比较常规化,所以我们在此只针对密码实验应用部分进行描述,因此边界类图中不包含对管理工具的用户界面实现的描述。

我们从主界面所包含的界面要素入手,按界面的级别逐次描述密码实验平台的用户界面构成,具体如下:

I)密码算法选择列表

密码算法列表以列表的形式展示了系统中已有的密码算法,供学生选择待实验的算法。密码算法包括初始提供的四种算法及后继通过密码设计实验定制出来的密码算法,在算法比较多时,支持按目录的组织形式。

II)密码实验选择列表

密码实验列表以列表形式展示四种密码实验供学生选择。密码算法的选择结合密码实验的选择决定了需要进行的实验及算法。

III)密码实验工作区

密码实验工作区是进行密码实验的界面区域,密码实验工作区有三种类型,系统根据用户在密码实验列表中的选择从而展示对应的工作区。三种密码实验工作区的实现分别介绍如下:

i)密码验证/演示实验工作区

这里将密码验证和演示演示统一在同一个工作区中,因为他们的主要任务都是运行密码算法,两者之间的区别是:密码验证是直接运行密码算法并输出加密或解密算法的结果,而密码演示是分步骤执行密码算法,并显示每一步执行的基本运算单元的计算结果。

该工作区可以进一步分解为以下几个部分:

a) 结果输出区

在密码验证实验时输出算法执行的结果,或者在密码演示实验时,逐次输出算法流程上每一个基本运算单元单步执行的结果;

b)运行及单步执行工具栏

该工具栏包含了一系列按钮,指定执行密码算法的多种方式。主要执行操作按钮包括:直接运行按钮、单步骤执性算法按钮(每点击一次就执行一个基本运算单元)、开始单步骤执行并深入内部步骤按钮(开始下一步骤的基本算法单元的执行,并进入密码算法单元内部俺更小的步骤执行该算法单元)、执行到指定步骤(直接运行到当前选择的基本运算单元)按钮等。这些按钮驱动算法流程展示区内的执行方式及结果输出区的输出内容。

c) 算法流程展示区

在区域内,以直观的方式展示由算法流程环节的基本运算单元所组成的算法流程图。

ii)密码设计实验工作区

密码设计实验工作区供用户选择基本运算单元,并构造密码算法。该工作区包含以下实现部分:

a) 基本运算单元工具箱

该工具箱分组排列了代表基本运算单元的控件,用户可以选择需要的控件并拖放到算法流程设计区中以构造密码算法。控件的类别包括:一类控件实现参数的输入,包括密钥、密钥长度、待加密的明文及代解密的密文、迭代次数等参数的输入;另一类控件实现基本的运算逻辑,包括各种位运算、置换运算等等。

b) 基本运算单元帮助信息

该界面控件展示了当前在算法基本单元工具箱或者算法流程设计区中选中的基本运算单元相关的帮助信息。帮助信息来自资源管理层的算法知识体系管理子系统,其内容包括该基本运算单元的含义、详细说明、输入输出接口定义信息、使用举例等帮助信息。这些信息在设计时为学生指出了基本运算单元的用途及用法。

c) 算法流程设计区

在区域内,以直观的方式展示用户设计的算法流程图,流程图内的基本单元控件可以通过鼠标调节流程的布局。

iii)密码攻击实验工作区

密码攻击实验工作区是供学生操作密码攻击实验的界面要素,它与密码验证实验工作区类似。不同之处是验证实验需要选择密码算法,而攻击实验则选择密码攻击算法。

IV)密码信息面板

密码信息面板提供当前选择的密码算法或基本运算单元的相关信息以帮助学生对算法的理解和学习,这些信息包括是围绕知识点展开的多个方面的内容。密码信息面板包括以下四个部分:

a) 密码理论知识面板

该部分显示与当前选择的密码算法及基本运算单元相关的理论知识,这些内容取自资源层的密码知识库。

b) 媒体素材列表面板

该部分以用户友好的方式显示媒体素材库里的文件列表,媒体素材包括密码学PPT教案文件、多媒体课件、论文文件等,其来源为资源层的媒体素材库。

c) 相关讨论列表面板

该部分显示围绕目前选中的密码算法或基本运算单元所开展的历史讨论信息,其内容一般是学生的提问、交流与教师的答疑。

注:面板的下方提供“提问”与“回答”入口,通过入口可以激活讨论主题发表面板,供学生或老师提出新的问题,或回复选中的讨论条目。

d) 网络资源链接面板

该部分显示资源层的网络资源库上收集的关于当前密码算法的各种网络资源的链接信息。

2 密码实验平台的关键逻辑实现

密码实验平台的实验逻辑层在资源管理层服务的协助下,共同实现了密码实验的逻辑处理部分。该部分得焦点是对密码算法及基本运算单元的建模,以支持可扩充的密码算法体系,并能够将密码算法细分以实现按步骤执行的演示过程或根据基本运算单元构造复杂密码算法的过程。本节将主要围绕这些关键问题进行较为详细的阐述。

2.1建模思路阐述

密码实验平台的关键目的之一,是通过该平台学习和验证密码算法及其相关密码理论。对于一个具体的算法来说,许多的实验平台只提供了整体“黑盒”的验证,这种实验平台对于教学方面有一定的约束:对于算法内部的相关步骤难以提供清晰的验证过程,很难深入算法内部的相关步骤进行验证,或进一步动态的分步骤演示密码算法;由于算法的整体“黑盒”,学生很难自己完成一个算法的设计过程的教学。针对这些约束,本文采取将密码算法的相关基本运算单元的组件化,算法设计方式的流程化来解决这些问题。

基本运算单元组件是指,通过对密码算法和理论的分析,将密码算法的计算单元归类,形成密码学常用的运算单元和密码理论的运算单元。例如,可以围绕着数论基础理论开发指数运算、乘法逆元、离散对数的求模运算等组件,针对算法开发相关的组件,如置换、异或、扩展、拆分、合并、移位等等。这些基本的计算单元,是组织算法的基本部件。

算法设计流程化是通过算法流程的设计,将基本运算部件组合衔接起来,形成一个算法的组合流程(参见图 5-2)。通过这些算法流程的设计,可以将密码学中的算法由基本运算部件组合而成,这样在一个算法中,算法经过分解变成“白盒”,由一系列粒度更小的基本运算部件的“小盒子”组成。算法设计的流程化,不仅可以支持密码实验平台达到让学生分步骤演示算法的目的,还可以达到供学生自行设计新的密码算法的教学要求。

image

图 2 密码算法设计示意图

2.2密码算法的建模

2.2.1基本运算单元的实现

基本运算单元是“黑盒”级别的最小粒度,是影响密码算法设计或算法流程设计的最基本构成单元。依照前述章节可知,它需要支持密码算法的设计(设计时)和密码算法的演示(运行时),支持这两方面的要求,对于基本运算单元的设计和实现的工作包括两个部分,基本运算单元可执行文件和基本运算单元的描述文件。

l 基本运算单元建模

基本运算单元是将密码算法和理论中相关处理单元分解而来的,由于算法的特殊性,不同的算法存在着具有自身算法特点的要求,这就要求建模不但要满足基本的基本运算单元的可扩展性,同时还要满足特殊基本运算单元的可扩展性。这是基本运算单元算法库既可根据密码算法的个性要求实现其要求的能力,又具有可扩展性的最基本要求。

在基本运算单元算法库,需要保证大多数的基本运算单元是可重用的(流程设计中的重用,参见下节);基本运算单元之间可以互相引用,能够满足不同算法的使用。同时需要保证多数基本运算单元是独立的,不和具体的密码算法具有过强的耦合关系,当然为了支持较为特别的密码算法,我们也不排斥具体的密码算法有其特定的个性化基本运算单元。

每一个基本运算单元需要在算法演示过程中作为一个“黑盒”,能够在流程步骤的执行中展示其运算结果。

image

图 3 基本运算单元和复合运算单元

如图所示,所有的基本运算单元都需实现公共接口 ICalUnit,ICalUnit规范了密码算法演示过程中该基本运算单元的执行方法、基本运算单元与密码实验的运行时环境的数据交换接口以及参数验证等工作的基本接口。其中,execute()方法最关键,继承该接口的子类在该方法中实现基本运算单元的计算逻辑。

通过规范基本运算单元的顶级接口,可以对算法库有较好的可扩充能力。因为密码算法的流程构造是通过组合、操纵该顶级接口完成的,而与该接口的具体实现类(各种类型的基本运算单元实例)无关。因此,当现有基本运算单元不足以提供构造待设计的新密码算法的能力时,根据算法的需要设计一个实现了ICalUnit接口的新基本计算单元,即可参与到算法流程的构造中去,增加流程构造的能力。

l Composite模式与基本运算单元的调用扩充性[31-33]

Composite设计模式将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得调用该模式外部的客户程序逻辑对单个对象和多个对象组成的复合对象的使用具有一致性。使用Composite模式可以带来以下两个好处:1)使客户逻辑的调用简单,客户逻辑可以一致的使用组合结构或其中单个对象,而不必关心自己处理的是单个对象还是整个组合结构,简化了客户逻辑的代码实现;2)更容易在组合体内加入对象部件,并且客户逻辑不必因为加入了新的对象部件而更改代码。Composite设计模式的结构图示如下:

image

图 4 Composite设计模式

基本运算单元的模型设计采用了Composite组合设计模式,CompositeCalUnit类等同于Composite设计模式中的CompositeComponent类,而ICalUnit接口则等同于IComponent接口。在CompositeUnit类中可以包含实现了ICalUnit接口的基本运算单元来辅助完成复杂的复合运算单元的实现。

在基本运算单元中采用Composite设计模式,既可以提高基本运算单元粒度,使学生在设计时更方便的直接使用大粒度的基本运算单元,而不用每次都使用最小的基本运算单元从头构造密码算法,又可以有效的通过现有的基本运算单元派生新的复杂运算单元,而无需提供实现代码。这样,对各种密码算法中比较普遍的同一个处理逻辑片断,如果学生已经熟知片断内部的实现流程,就可以将这种逻辑片断设计成复合运算单元CompositeUnit,它由基本运算单元构成自身的逻辑,不用另外单独提供实现逻辑,并且它可以独立使用。从而达到在运算单元级别的可重用性。

l 基本运算单元的描述文件

基本运算单元的描述文件是列举了系统内所有可用的基本运算单元的配置文件,它针对每个基本运算单元描述了其元数据信息,这些元数据信息在系统构造基本算法库时或学生设计密码算法流程时,提供相关的帮助信息。基本运算单元的主要内容包括:

n 基本运算单元的输入接口、运算单元的输出接口以及对数据类型的约束等信息;

n 基本运算单元的资源文件,当在密码算法设计工作区或者演示工作区显示算法序列时,资源文件指定了该基本运算单元所在步骤的图标等信息;

n 基本运算单元的实现逻辑的包名、类名等名字,用于根据描述重新载入基本运算单元;

这些描述文件一方面保存了重新构造基本运算单元列表所需的信息,另一封面饱含了在算法流程设计过程中使用的、与基本运算单元相关的指导信息。

同时,利用基本运算单元的输入接口信息及数据类型约束,系统在设计时能够获得上一组件的输出在类型和长度等是否满足本基本运算单元的约束;提供相关的图标资源,显示流程节点的图标;提供包名及类名等信息,供系统载入基本运算单元时使用,载入基本运算单元的过程是通过运算单元创建工厂(CalUnitFactory)动态的加载相关的类文件而实现的。

l 基本运算单元的扩充方式

 从前文“基本运算单元建模”中我们得知创建新的基本运算单元需要实现ICalUnit接口,提供新的子类的实现逻辑。而新建立的ICalUnit的子类所代表的基本运算单元要想出现在系统可用的基本运算单元列表中,就必须修改基本运算单元的描述文件,在描述文件的系统可用基本算法单元列表中增加描述新的运算单元的配置项。这样,新扩充的基本运算单元在系统内才是可用的,将出现在设计工作区的基本算法列表中,并可以在流程环节的构造中使用。

2.2.2密码算法流程的实现

密码算法流程包含了多个基本运算单元,并通过它们的输入、输出之间的衔接关系组成的一个计算序列,实现了密码算法的处理逻辑。

密码算法流程设计的核心是对基本运算单元所构成的处理序列的设计,并规约处理序列的执行,通过这些方面的处理能力来完成密码学教学中密码设计实验及密码演示实验等教学活动。本节将着重介绍密码算法流程的概念和算法处理序列的执行过程。

l 密码算法流程(序列)建模

在密码算法的流程设计中,有几个主要的概念:

n 算法序列:Sequence,由一系列的Action(活动)组成的操作序列。在序列中,指定了Action的执行顺序,并为Action的执行提供了上下文环境的支持,包括参数解析等。

n 执行活动:Action即一个单独环节的运算逻辑的执行活动,它在密码算法序列中被轮到调用的时候,执行活动将运算逻辑的实现通过委托模式委派给对应的基本运算单元执行,并为计算单元组织上下文的参数,为序列提供输出参数。

算法序列与执行活动的概念在系统中被密码设计实验的密码算法流程设计、密码演示实验的密码算法流程运行这两个地方作为核心逻辑使用。

在流程设计中通过用户设计工作生成包含了Sequence和Action的密码算法定义的描述文件,持久化以供后继使用新设计的密码算法;而在流程运行时,又将密码算法流程定义的描述文件载入并构建对应的类对象体系,以供演示实验流程运行。

下图是对算法流程建模中关键类实现的静态结构角度的设计:

image

图5 密码算法流程静态结构示意图

ActionSequence继承了ISequenceDefinition接口,它代表对一个密码算法序列的定义。密码算法序列包含了密码算法,同时还可以包含子算法序列。下图描述了算法序列之间对象关系,进一步说明如下:

image

图6 ActionSequence与ActionDefination的关系

l 密码算法序列的描述档案

算法流程设计完成了新算法设计的过程,并最终生成一个Solution档案文件。Solution档案文件是一个文档的集合,主要用来集中定义密码算法序列和执行活动的各个方面的规约。

在文档的集合中,包括对Action Sequence 定义,规约了如何通过加密或解密算法所需的较小的基本运算单元部件组合成一个密码算法,例如:DES加密算法可以由多个变换/移位、与或等基本运算按照一定次序先后衔接组成,在算法设计时通过对这些DES所需基本运算所对应的单元组件的使用构成Action Sequence,从而形成一个完整的DES算法。

同时,文档集合中还对那些与密码算法及基本运算单元相关的资源的进行了规约,具体包括工作区内与该密码算法配套的用户界面的展示信息、算法实验的控制信息等,例如:是否将某部分熟知的子序列看作“黑盒”,不需要单步执行子序列内的计算单元,而是直接执行此子序列,并直接输出子序列的结果而非逐步展示序列内部细分步骤的结果。

l 密码算法序列的装载及运行

下图展示了支持密码算法序列的装载及运行的相关类的静态结构关系:

image

图7 密码算法的装载及执行类图

n CipherSolutionEngine:密码算法方案(Solution)引擎,它从CiperSolutionXMLHelper获取被解析的Solution档案中的Acion、Acton Sequence等定义,并根据定义指导它们的执行(运行方式包括直接运行、单步执行、运行到代表了指定运算单元的Action等),并协调在执行过程的生成的中间结果(包括运算单元产生的中间结果)可以随着执行的步骤同样被传递;

n CiperSolutionXMLHelper:密码算法方案档案文件装载-解析器,它负责接收来自密码算法资源库的算法Solution档案文件(以XML格式保存),并解析该Solution,解析出构成该Solution的Action、Action Sequences等内容的定义;

n CalUnitFactory:基本运算单元的类工厂,它按照名字动态创建基本运算组件。它采用了Factory设计模式,使基本运算单元在创建时的具有可扩充性,即无需实现知道系统支持多少基本运算组件,而是根据需要动态创建。CalUnitFactory 有一个映射表,在其中配置每个运算单元的名字与它的物理实现及存储路径(java里体现为包)的映射关系。映射表的内容从资源层的基本运算单元库装载。类工厂就是基于映射表按照名字去实例化对应的基本运算组件。

n IRuntimeContext:运行时上下文管理器,算法序列(Action Sequence)被Solution 引擎从XML格式转换成可以被运行时上下文所能解析的对象,而运行时上下文管理器则维护Solution引擎与算法序列之间的要约,主要内容包括算法序列所需要的参数、基本运算单元之间的数据的传递和获取,并对算法序列运行时基本运算组件所产生的输出进行保存和传递,并进一步执行算法序列与基本运算组件之间的类似要约。

n IActionParameter:基本运算单元的参数,它以元组的形式定义了参数名称与参数的值之间的映射。因此,通过参数的名字可以访问参数的值,它被用来处理基本运算单元的输入和输出的参数传递。

在详细解释了密码算法流程的静态结构建模之后,下图我们从动态的角度进一步展示了各个类之间交互关系的活动序列:

 

图8 密码算法装载过程示意图

l Factory模式与基本运算单元的创建可扩充性

工厂设计模式(Factory)属于简单的创建型模式,它将创建对象的过程进行了抽象,从而使调用对象的客户程序仅仅需要去使用对象,而不再需要根据情况创建每一类对象。

在上文算法序列的装载与运行一节,我们采用了Factory模式,从而使算法序列装载中所需的各种基本运算单元ICalUnit都是通过类工厂CalUnitFactory来创建的。CalUnitFactory则根据从基本运算单元库所加载的映射表,动态装载所需的基本运算单元。因此,基本运算单元的创建过程是可扩充得,增加新的基本运算单元无需更该任何代码。

2.3密码算法UI组件的实现

密码算法的UI组件主要是指实验工作区中构成算法序列(Squence)的UI展示部件,这些UI组件被用于设计及演示密码算法。

2.3.1 UI组件的形态

密码算法的UI组件要能够充分表示算法序列的设计与执行,因此每个UI组件必须具有设计态和运行态两种形态。

l 组件的设计态

在算法设计实验工作区内,UI组件表现为设计态。设计态的组件具有以下特点:能够移动位置并调节大小,能够提供输入输出端口以表示对应它的基本运算单元的输入参数和输出参数,能够表示输入输出端口之间的衔接关系。

l 组件的运行态

在算法运行实验工作区内,UI组件表现为运行态。运行态的组件不支持设计态下的编辑能力,而是支持表示序列运行的一些特性,包括提供状态能够表示某组件是当前运行的步骤,能够提供状态表示哪些步骤已经运行而那些尚未运行等,能够提供状态表示该步骤的输出结果等。对于在组件上表示算法序列里对应的基本运算单元的运算结果这一要求,需要作一些额外的说明。

一种情况是将基本运算单元作为一个黑盒,对算法序列中的每一步基本运算单元,只需要提供该单元的运算结果。在这种情况下,最好将每一步的输出结果经过重定向追加到密码演示工作区的结果输出区。

而另一种情况是还需要详细展示基本运算单元内部的处理情况,比如对于循环移位运算单元,我们希望能够一步步的动态表示移位的过程。在这种情况下UI组件需要针对基本运算单元专门提供,在基本运算单元中,提供状态属性(State),并且在运算单元一步步地运算过程中能够向UI组件通知(Notify)其经过了一步运算并且状态改变了,UI组件根据通知获取新的状态并及时更新其显示(Redraw)(可参照“基本运算单元UI组件类图”理解该部分描述)。

2.3.2 UI组件的类别

UI组件被用来构造算法序列的图形化表示,经过分析可以将UI组件划分为以下几类:

l 输入组件

输入组件位于算法序列的起始端,该类组件负责接受用户输入,并为算法序列的后继运算单元提供数据。用户通过输入组件可以为算法序列提供输入参数,包括待加密明文、待解密的密文、密钥、密钥长度、迭代次数、置换盒的初始数据等。输入组件没有输入端口,它从用户界面接受数据,并设置给自己的基本运算单元,然后将数据在输出端口发布。

l 运算组件

运行组件是构成算法序列的主体,它对应于实验逻辑层的基本运算单元。它显示对应的端口,端口对应于基本运算单元的输入输出。

l 连接组件

连接组件的用途是在UI层表示算法序列中基本运算单元之间的衔接关系,通过连接组件的关联,前继运算组件的输出端口后继运算组件的输入端口相连,代表了前继的基本运算单元的输出结果传递给后继基本运算单元的输入端口。

2.3.3 UI组件的设计

如图所示,CalUnitUIComponent是UI组件的父类,它具有了观察者模式中的观察者特性,通过观察者模式与基本运算单元协作,即即时地获取基本运算单元的状态或结果并显示。

image

图 9 基本运算单元UI组件类图

2.3.4 Observer模式与基本运算单元界面展示的可扩充性

Observer观察者设计模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者与被观察者之间仅仅通过模式自身的机制相联系,而不存在逻辑的相互依赖。

如上图所示,基本运算单元的UI组件与逻辑组件采用了Observer设计模式。其中,基本运算单元的公共接口ICalUnit实现了Observer模式的被观察者接口ISubject,而其UI组件则实现了观察者接口IObserver。通过采用Observer设计模式,实现了ICalUnit的基本运算单元只需通过祖先接口ISubject的notify()方法,便可将自身状态的变化通知其UI组件;而UI组件则只需通过自身祖先接口IObserver的update()方法,便可获取到基本运算单元的状态变化。该设计模式解除了基本运算单元与UI组件的依赖关系,从而使一种运算可以根据演示的需要提供多种UI组件,保证了基本运算单元的UI展示是可扩充得。

 

3 密码知识体系的实现

本密码实验平台是融合了密码实验、协作学习、密码知识体系等多个角度内容的综合性实验平台,要有效地建立这样一个综合性的密码实验平台,对密码知识体系的有效管理和实现对该密码实验平台的建设起到很重要的作用,密码知识体系需要综合实验设计、协作学习、密码知识体系等多个角度的管理来设计和实现。

密码知识体系管理的内容包括:密码算法的理论知识、媒体资料(如PPT教案、论文的文件等、SWF演示材料等)、网络资源链接、密码算法、运算单元、协作内容(交流子系统中与该密码、该实验相关的讨论内容)等。如果下图所示:

image

图10 密码知识体系示意

如图,可以看出各种知识概念或知识内容是相互关联的。在密码实验平台中,需要考虑综合利用这些知识或资源间的相互关系进行有效的组织。

对知识体系进行有效的建模的目的是完成密码知识的管理以达到上下文感知(即需要与当前操作界面上的算法知识点及功能要能够关联对应)的交互式帮助效果,并与协作学习的交流内容相参照。

为了达到这样的目的,我们将密码知识体系的内容划分成为各类资源,再通过一个基于算法体系的概念体系将这些相关的资源有效的组合起来。这样,用户可通过这些体系关联到相关感知和有效的上下文关系时进行帮助。

image

图11 知识管理体系类图

上图(图11)是密码实验平台的知识体系管理的静态类结构图,对类结构图中的关键类的作用描述如下:

l 知识体系目录(Catalog)

Catalog是知识体系组织的结构,它采取了目录的形式,组织各种关于密码学的理论知识,根据目录结构添加相关的知识资源,并提供知识相关检索的功能。密码学知识体系结构的目录表现可以参见相关章节的描述。

l 知识资源(Resource)

Resource是所有被管理的资源的基类,它提供基本的资源操作接口,主要包括对不同类型的资源进行访问的接口(接口的实现由代表各类资源的子类具体实现),以及资源打开及保存等。在各种类型的资源子类实现中,完成各自的资源与知识库的之间的访问。

l 资源访问接口(AccessResource)

资源访问接口的作用是通过不同的方式访问各相关的资源,提供给UI及实验逻辑层等地方使用的资源访问操作接口通常包括:1)访问每个Catalog的所有资源;2)通过Catalog,利用资源类型可以访问到该类型的所有类别及数量的资源。

4 其他实现要点

在上文中我们对密码实验平台的核心处理逻辑的实现做出了较为详细的设计,本小节将对实验平台的其他非关键部分的实现思路简单进行介绍,这些部分在实现的过程中因为其功能具有相当的普遍性,已经存在于现有的各种系统中,甚至可以很容易获得在各主流技术架构下的这些公共功能的共享库的开源版本。因此,在密码实验平台的实现过程中,我们不打算从头开始编写这些公共的逻辑,而是尽量采用这些公共功能的已有开源实现,这也符合目前商业软件普遍采取的做法。

在本文中涉及的其它非关键部分的实现要求具体描述如下,这些实现方面的要求将作为下一步选择第三方实现的考察标准。

l 用户管理

本实验平台的用户管理相对简单,只需实现用户和角色的概念,提供常规的用户维护、角色维护、对用户委派角色等功能即可。

l 权限管理

在权限管理方面,根据实验平台应用的特点,主要包括以下要点:权限的粒度应该控制在资源的级别;权限的控制包括增、删、改、读几个方面;权限的授予对象为角色,没有必要深入到直接向用户授权的程度。

l 日志管理

因本平台不是关键事务处理的业务系统,不需要特别严格的记录各种细节以供备案或辅助系统维护,因此,日志管理可以直接使用对应技术架构下的主流Log共享库,在系统的各种操作的出入口处加入观察点,将操作历史记录在日志文件中即可。

日志机制在本系统中一个比较有价值之处就是纪录每一个算法序列及运算单元执行前与执行后的时间戳、执行所占用的时间等效率方面的信息,用户调节算法相关的输入参数(如密钥长度、循环次数等),并使用这些效率纪录,可以掌握参数设置对算法效率的影响。

l 讨论交流、媒体素材及网络资源的管理

这几个部分都是要求能够按照密码算法建立对应类别,并追加类别相关的辅助内容。讨论交流部分简单要求能够供用户在各类别内以建立或回复话题的方式展开讨论即可,媒体素材管理要求能够向对应的类别附加文件,而网络资源管理则要求能够向对应类别附加网络资源的URL链接。

在实现时,我们打算集成现有的开源内容管理系统(Content Manager System, CMS),目前这方面的开源系统非常多,并且都很出色的体现了知识管理的概念,完全能够满足本实验平台的要求。当用户使用集成了内容管理系统的密码实验平台时,在密码知识体系的学习方面将充分享受内容管理系统所带来的知识管理能力及协作交流能力。

至于在密码实验工作区中集成各种密码知识并显示在工作区的信息面板这一功能,已经在上文逻辑设计部分关于“密码知识体系的实现”一节进行了设计。实验平台核心逻辑部分只是按需从内容管理系统中提取相关内容并显示在实验工作区以达到联机帮助的目的而已。

在实现时应该在实验平台的核心逻辑与第三方的内容管理系统之间的边界提供采用了Adapter设计模式的边界类,Adapter边界类通过适配的手法将内容管理系统的资源的概念及获取方式作为服务提供给核心逻辑的其他部分。

5小结


本文围绕密码实验平台的关键处理逻辑描述了用户界面、实验逻辑以及知识体系等方面的实现细节。我们在实验逻辑的实现中采用Composite设计模式使基本运算单元具有调用的可扩充性,系统中调用了基本运算单元的其他逻辑不受该部分内容扩充的影响;采用了Factory设计模式使基本运算单元具有创建的可扩充性,系统中根据算法流程的需要而创建基本运算单元的那部分逻辑不受运算单元扩充的影响;采用了Visitor模式保证了算法的基本运算单元部件的逻辑处理与展示形式隔离,从而能够在处理逻辑不变的情况下根据演示要求对同一个运算单元选择不同的展示部件。

同时,针对系统中地非关键部分,我们还针对他们所涉及的功能普遍存在于其他系统中,并且有大量的免费开源软件库可以使用的特点,提出了在本密码实验平台中集成现成的成熟开源库,并通过Adapter设计模式将具体资源适配转换到本系统中的处理方法。

(为友人所作的设计,非本人领域,熟悉领域者请多给意见)

原创粉丝点击