文件加密系统概要设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文件加密系统概要设计
Version:Beta 0.03
目录
1. 导言 (5)
1.1目的 (5)
1.2范围 (5)
1.3缩写说明 (5)
1.4术语定义 (6)
1.5引用标准 (6)
1.6参考资料 (6)
1.7版本更新信息 (7)
2.系统分析 (8)
2.1 概述 (8)
2.2 分析 (8)
3.概要设计 (9)
3.1 服务端 (9)
3.2 客户端 (9)
3.3 数据存取 (9)
4.数据模型 (10)
4.1加密后的文件数据模型 (10)
4.1.1 模型 (10)
4.1.2伪代码 (11)
4.2快速加密的文件数据模型 (12)
4.2.1第一类模型 (12)
4.2.2第一类伪代码 (12)
4.2.3第二类模型 (12)
4.2.4第二类模型 (13)
4.2.5第三类模型 (13)
4.2.6第三类伪代码 (14)
4.3文件头 (15)
4.4 XML文件数据模型 (16)
5.界面设计 (17)
5.1欢迎界面及主界面 (17)
5.2文件加密界面设计 (18)
5.3文件解密的界面设计 (21)
5.4信息提示对话框设计 (24)
5.5右键集成 (25)
6.核心设计 (26)
6.1 加密模型 (26)
6.1.1文件加密的基本模型 (27)
6.1.2密钥生成模型 (27)
6.1.3针对文本文件的加密模型 (28)
6.1.4针对可执行程序的快速加密模型 (28)
6.1.5所有文件类型可用的完全加密模型 (28)
6.1.7针对文件系统的加密模型 (28)
6.2相关算法 (30)
6.2.1 MD5算法 (30)
6.2.2异或 (31)
6.2.3 Blowfish (31)
6.2.4 DES (31)
6.2.5 RSA加密算法 (31)
6.2.6 AES (33)
6.3加密服务流程 (35)
6.3.1文件分析 (35)
6.3.2文件分块 (36)
6.3.3提取需要处理的块 (36)
6.3.4建立列表 (36)
6.3.5校验 (37)
6.3.6返回结果 (37)
6.4参数解析 (38)
6.4.1内存设定 (38)
6.4.2输出选项 (38)
6.4.3分块 (39)
6.4.5加密方法 (39)
6.4.6加密/ 解密 (39)
6.5界面实现 (40)
1.导言
1.1目的
该文档的目的是描述文件加密系统的概要设计,内容包括:
1、界面设计
2、数据模型
3、服务流程设计
4、核心设计
1.2范围
该文档中定义了系统的各个模块划分和各自的接口,但尚未定义确实的接口名称及参数名称、实现方法,缺失的内容将在详细设计中描述。
1.3缩写说明
MD5
Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)
DES
数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统。
RSA
RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。
RSA取名来自开发他们三者的名字。
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。
RSA 算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
AES
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。
2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
C/S
Client / Server 即客户机/服务器结构。
UAC
(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员密码。
1.4术语定义
状态机
关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。
状态机通过响应一系列事件而“运行”。
每个事件都在属于“当前”节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。
密钥
密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的数据
公钥/ 私钥
公钥是与私钥算法一起使用的密钥对的非秘密一半。
公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。
公钥和私钥是通过一种算法得到的一个密钥对(即一个公钥和一个私钥)其中的一个向外界公开,称为公钥;另一个自己保留,称为私钥。
XML
可扩展标记语言(Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
XML是标准通用标记语言(SGML) 的子集,非常适合Web 传输。
XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
NTFS
NTFS是Windows NT以及之后的Windows 2000、Windows XP、Windows Server 2003、Windows Server 2008、Windows Vista和Windows 7的标准文件系统。
EXT
它是专门为Linux设计的文件系统,拥有最快的速度和最小的CPU占用率。
$MFT
NTFS中,卷中所有存放的数据均在一个叫$MFT的文件中,叫主文件表(Master File Table)。
1.5引用标准
《软件工程》相关课程作业标准
1.6参考资料
[1] 《软件工程》第三版李代平等编著
清华大学出版社;
[2] 《编译原理》第2版[美]
机械工业出版社;
[3] 百度百科;
[4] 维基百科;
[5] CSDN;
[6] GitHub;
1.7版本更新信息
版本控制:
2.系统分析
2.1 概述
本系统整体设计思路为,在以C/S 架构为基本架构的设计基础上,设计用于实现文件加密的核心系统(S )和通过核心系统提供的接口及API 编写制作的若干客户端(C )。
2.2 分析
系统将如下图运行:
在文件加密服务过程中,客户端只负责其中的配置文件读写、文件列表组织及配置最终参数,对于服务端来说,客户端只提供文件列表与加密参数(选项),对文件系统及操作系统的交互/读写由服务器端完成。
对于客户端来说,服务端负责返回参数的处理结果,如上图左半部分所示。
故整体可简化如上图右半部分,客户端与服务端可运行于不同的主机实体上。
3.概要设计
3.1 服务端
服务端主要由C语言(泛)编写,功能按代码组织上划分为与平台(操作系统)有关的部分及与平台(操作系统)无关的部分(详见[6.核心设计])。
服务端通过以下几种方式接受来自客户端的参数:
1、控制台命令行参数;
2、进程通讯;
3、CGI参数;
4、动态库调用(作为模块嵌入客户端);
获取参数后,服务端通过操作系统及平台与指定的文件系统进行交互,并通过以下方式返回处理结果:
1、控制台状态字;
2、进程通讯;
3、XML文件;
4、回调返回值;
获取返回结果后,客户端按预设方式将结果反馈给用户。
3.2 客户端
客户端只在调用加密处理程序的部分需要遵从服务端定义的通讯接口进行数据交互,其余部分如读取文件列表、用户界面显示、回显服务端返回数据等操作均与服务器无关,理论上客户端可采用人已变成语言编写,本设计中将用C / Java设计客户端以完成演示(详见[5.界面设计])。
本设计中的客户端预定采用的与服务端进行数据交互的方式:
1、控制台命令行参数;
2、进程通讯;
3.3 数据存取
从平台无关、兼容性角度出发考虑,数据存取通过系统API、系统调用完成,服务端及客户端的程序本体已经发布不再在使用过程中修改,参数等信息通过外部配置文件存取,配置文件采用XML格式。
4.数据模型
4.1加密后的文件数据模型
4.1.1 模型
如下图:
-端
加密后的文件,从文件类型、文件结构来说都与原文件不同,加密后的文件中包含几个数据结构,分别描述加密算法、分块、源文件描述等。
其中,加密分块中包含已加密数据区和无加密数据区,数据区内的分块由块描述数组描述,分块的组合顺序由块顺序表描述,块顺序表本身经过简单的加密。
4.1.2伪代码
伪代码描述如下:
4.2快速加密的文件数据模型
4.2.1第一类模型
采用快速加密进行加密的文件数据模型如下(第一类):
上图所示为经过快速加密生成的一类文件,这类文件通常为采用非文本非应用程序优化的简单快速加密生成,数据区包含原文件的文件头及数据部分。
4.2.2第一类伪代码
伪代码描述如下:
4.2.3第二类模型
针对文本文档进行的快速加密,数据模型如下:
对于此类文件,从数据组织上属于前一种文件的子类,文本文档几乎都不具有文件本体上的文件头部,因而加密过程不对文件头进行加密,加密描述中添加关于文档编码的描述。
4.2.4第二类模型
4.2.5第三类模型
对于采用针对可执行文件进行的快速加密生成的文件,加密后将生成针对可执行文件的数据段描述及代码段描述,该加密方法不属于快速加密方法的子类。
其加密后的数据模型如下:
-端
4.2.6第三类伪代码
4.3文件头
下图是一个Word文档文件的文件头截取:
在现代文件系统中,除文本文件外,几乎所有文件类型都有其特有的文件头部,头部中包含对文件的大小、创建者、权限信息等文件系统共有的描述及文件类型独有的数据描述,例如图片文件的文件头中记录了图片的尺寸等。
在4.1~4.2中叙述了加密后的文件的数据模型,其数据结构中,除去原文件头和数据区以外的所有信息都包含在加密后的文件的头部中。
具体的头部区段映射将在“详细设计”中叙述。
4.4 XML文件数据模型
服务端的XML文件采用UTF-8编码,XML 1.0方式进行读写,服务器端的XML文件主要记录加密时不指定部分参数时参数的默认值。
示例如下:
<ENCRYPT>
<USER>
<ID>1</ID>
<TYPE>1</TYPE>
<ROTE>1</ROTE>
<MEM>1024 512 A</MEM>
<OUT>DEFAULT</OUT>
<OUTD>DEFAULT</OUTD>
<BLOCK>DEFAULT</BLOCK>
<METHOD>DEFAULT</METHOD>
</USER>
</ENCRYPT>
XML文件中采用按用户ID进行参数记录的方式,约定ID=0的用户为默认值或不开启用户系统时的默认参数选项,上述参数定义如下:
用户端的XML文件按系统环境采用UTF-8或者Unicode / ANSI 编码,记录内容与服务端相同。
5.界面设计
本章阐述的是客户端的界面设计。
5.1欢迎界面及主界面
运行程序后,首先出现欢迎界面:
选择界面
欢迎界面整体是一个列表框,其中“文件加密”按钮是进入文件加密的界面,而“文件解密”按钮则是进入文件解密的界面,选择“载入主窗口”则进入软件主窗口,用户可在列表框中添加自定义项。
载入主窗口:
软件主界面
上图是软件主界面,设定项将在下面介绍。
5.2文件加密界面设计
“添加文件”界面
1、在选择文件加密后,就会跳到添加文件的界面,在添加文件的界面中,通过“添加文件”按钮,可以在系统中选择文件;
2、选定文件以后,选中文件的路径会显示在右边的方框中,这样可以方便用户确认选中的文件是否符合原设想;
3、用户确定选中的文件无误后,通过“确定添加”按钮,把选定的文件添加到当前预选中的文件目录当中;
4、当前选中的文件目录会显示用户选中要加密的所有文件,方便用户检查是否已经把想要加密的所有文件都已经选定;
5、确定已经选定了所有想要加密的文件以后,点击“确定”按钮,可以进入下一步。
如果不想加密,可以点击“退出”按钮返回主界面;
“文件加密参数设定”界面
在选定文件以后,就会进入参数设定的界面。
在参数设定的界面中,有很多个选项需要选择的。
下面是对各个选项的介绍:
如果在选择过程中想回到最初的设定,可以按“恢复默认值”按钮来回到默认的状态。
如果用户常用的参数设置于系统默认的参数设置不同,用户可以通过“修改默认值”这个按钮来进入修改默认值的界面,对默认值进行修改。
如果想回到上一步的设置,可以按“返回上一步”按钮来回到上一步进行修改,当所有的参数都选好并确认无误后,点击“确定”按钮,可以进入下一步的操作。
“默认值修改”界面
当选择“修改默认值”的按钮后,就会进入修改默认值的界面,其中上述功能如参数,这里就不再逐一解释了。
其中,“返回上一步”按钮的作用是不保存已修改的默认值,返回参数设置的窗口;“恢复系统默认值”按钮是把默认参数恢复到系统默认的值;当用户修改好默认参数后,按“确定”按钮保存修改的值并退回到参数设置界面。
“加密进度”界面
当选择好参数后,就会进入加密的界面。
如图所示,进度条是显示加密的进度的,而中间的详细信息是显示加密过程中的详细信息的。
如果在加密过程中,如果想暂停加密,可以按“暂停”按钮进行暂停;暂停加密后,可以按“开始”按钮继续加密;如果想终止加密,可以按“停止”按钮终止对文件的加密。
“停止”和“加密出错”事件的发生将在“详细信息”文本列表框中有所显示。
“加密完成”界面
当加密完成后,会自动跳到加密完毕的窗口。
其中,“返回主界面”按钮是用于回到文件加密软件的主界面,执行其他操作;“查看加密文件”按钮是用于查看刚刚加密完的文件,按下该按钮会弹出加密文件所在的文件夹。
如果想继续对其他文件进行加密,可以按“继续
加密文件”按钮,然后返回到添加文件的窗口。
如果已经执行完用户所想要的操作,按“退出”按钮就可以退出该软件。
5.3文件解密的界面设计
“文件解密”选择界面
当在主界面选择了“文件解密”按钮的时候,会弹出一个文件添加窗口,其中“添加文件”按钮是添加单个文件用,而“添加目录”按钮能把选中的目录下的所有文件都添加进去,选中文件以及目录的路径会显示在右边的方框中,这样可以方便用户确定自己选中的文件是否有选错。
当按下“确定添加”按钮后,选中的文件以及目录都会添加到当前选中的文件以及目录的窗口当中。
当用户选择完想要解密的文件以及目录后,按“确定”按钮就能进入参数设定窗口,也可以按“退出”按钮返回主界面。
“文件解密参数设定”界面
进入到参数设定窗口后,需要对文件解密操作相关的参数进行设置,其中,各个参数
的介绍如下:
当参数设置完成以后,按下“确定”按钮可以开始加密,如果还有想添加的文件,可以按“返回上一步”按钮回到文件添加界面。
如果忘记了加密文件时候的参数,可以查看文
件加密时生成的参数信息文件。
“解密过程”界面
进入解密的界面后,文件就会开始进行解密。
进度条是显示解密的进度的,而中间的详细信息是显示解密过程中的详细信息的。
如果在解密过程中,如果想暂停解密,可以按“暂停”按钮进行暂停;暂停解密后,可以按“开始”按钮继续加密;如果想终止解密,可以按“停止”按钮终止对文件的解密。
“停止”事件与解密过程出现任何错误,将在“详细信息”文本列表框中反馈出来。
“解密完毕”界面
当解密完成后,会自动跳到解密完毕的窗口。
其中,“返回主界面”按钮是用于回到文件加密软件的主界面,执行其他操作;“查看解密文件”按钮是用于查看刚刚解密完的文件,按下该按钮会弹出解密文件所在的文件夹。
如果想继续对其他文件进行解密,可以按“继续解密文件”按钮,然后返回到添加文件的窗口。
如果已经执行完用户所想要的操作,按“退出”按钮就可以退出该软件。
5.4信息提示对话框设计
信息提示对话框在本系统中的主要用途:
1、系统运行错误时提示错误信息;
2、冲突处理时提示处理方案;
3、其他意外状况;
*、详见[6.3.6返回结果]
设计如下:
1、错误信息提示对话框:
2、冲突处理提示对话框:
5.5右键集成
“右键集成”设计将文件加密/ 解密选项集成在Windows资源管理器的右键菜单中,效果如下图的“7-Zip”:
集成右键菜单可让用户更方便地进行加密/ 解密操作而无需用户特意运行文件加密系统,菜单项设计如下:
6.核心设计
在本章节中,“核心”一词作名词用,意为文件加密系统的核心部分设计,即服务端的加密模块、参数解析模块设计及客户端的部分界面实现。
6.1 加密模型
构建状态图如下:
加密服务开始后,首先判断源文件类型,然后根据参数进行加密或者解密处理。
为了避免重复使用没有实际意义的加密算法组合对文件进行加密而造成冗余,加密系统将分析文件是否经过加密及已加密的文件在算法或者数据结构上是否与将要进行的加密操作产生有可能造成冗余或有可能造成二次加密的文件原内容泄露的情况而决定是否确实要对文件进行下一步的加密。
当加密系统即受到的处理命令为加密且源文件经加密系统判断可进行加密后,将文件调入加密系统进行加密处理。
同理,当系统接受的命令为解密时,系统将在判断文件是否曾经经过本系统加密、密钥是否相符后对文件进行加密或忽略处理。
6.1.1文件加密的基本模型
从文件层面来说,对一个文件进行加密后,应有的结果是:
1、得到一个新文件;
2、新文件完整记录了原文件的所有内容;
3、新文件未经解密不可正常读取;
4、基于第3点要求,原文件的文本部分内容需要经过加密处理;
5、基于第3点要求,原文件的多媒体部分内容需要经过加密处理;
6、基于第3点要求,原文件的可执行部分内容需要经过加密处理;
基于上述论点,建立一个基本模型:
然后,可以通过对该模型进行细化获得各种加密方式的模型。
6.1.2密钥生成模型
1、静态密钥
对于用户来说,文件密码可以是一组字符串,也可以是一个文件,而对于本系统来说,无论用户输入的是字符串还是文件,系统都将用户输入内容转换为一个规格化的密钥,本系统中,规格化密钥的处理交由MD5算法进行。
流程模型如下:
2、动态密钥
动态密钥将利用云平台(如SAE)、用户指定位置、计时器等提供的密钥文件/密钥种子生成一个密钥,动态密钥可有效防止内存监控产生的密码泄漏。
6.1.3针对文本文件的加密模型
对于文本文件,加密的目的是加密后文件中的数据不再是正确的字符集编码,结合使用环境,常用的字符集有ANSI、UNICODE、UTF-8、GBK2313,在对文本文件的加密中,需要以字符为单位对文件进行分块加密,此处的“字符”一词并不指代8字节大小的字符单位,字符的具体长度视文件编码而不同。
6.1.4针对可执行程序的快速加密模型
对于可执行程序(主要指PE文件及ELF文件),可行的快速加密方案是:抽取数据段进行全文加密,再在正文段中抽取、修改部分代码实现加密。
这种加密方式中,抽取的位置及抽取方式、修改方式都将根据密钥获得,而因为密钥由MD5生成,可执行文件执行过程中有操作系统提供完整性及代码安全性保护,可避免产生文本文件采用此加密方式可能导致的相近密码泄漏部分内容的情况。
在前期的资料搜集中,本小组发现在Windows 7 64Bit版本及Windows 8 Consumer Preview中,操作系统对PE文件有特殊的保护,针对PE文件的快速加密可能无法再所有操作系统上实现兼容。
6.1.5所有文件类型可用的完全加密模型
此加密方式中,将对接受加密的程序进行部分内容的全文加密。
全文加密具体实现的一个细节为分块操作,分块的实现参数将对实现效率造成影响。
6.1.7针对文件系统的加密模型
基于实际需求,系统将对包括NTFS和EXT3/4文件系统在内的文件系统上的文件进行与文件本身无关的进一步的可选的加密。
对于NTFS文件系统,构建如下模型:
如上图,对NTFS文件系统上的文件进行可选的文件系统加密时,加密系统首先提取源文件的MFT信息及Bitmap信息,进行针对文件本体的加密后,保存文件的簇序列和原MFT 信息到一个临时文件中,对该临时文件进行加密后,打乱源文件的簇序列并使用临时文件的MFT项信息替代源文件MFT项信息,然后对临时文件进行加密,插入到更改后的文件头部,此方法是模仿Bit Locker对文件进行文件系统层次的加密。
对于Ext 3/4文件系统中的文件,加密系统将根据用户权限对文件的节点信息、所属超级块及指向文件本体的硬链接根据权限进行类似的修改。
但是,针对文件系统进行的加密实现可能会在操作系统的权限保护、用户访问控制上遇到问题,因而此方案最终是否可用将取决于设计过程。
6.2相关算法
6.2.1 MD5算法
MD5算法用于生成128位密钥,密钥用于加密过程的运算。
以下内容中,部分摘取自百度百科。
对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。
因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。
填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。
然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。
经过这两步的处理,现在的信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。
这样做的原因是为满足后面处理中对信息长度的要求。
MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476。
当设置好这四个链接变量后,就开始进入算法的四轮循环运算。
循环的次数是信息中512位信息分组的数目。
将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。
主循环有四轮(MD4只有三轮),每轮循环都很相似。
第一轮进行16次操作。
每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。
再将所得结果向左环移一个不定的数,并加上a、b、c或d 中之一。
最后用该结果取代a、b、c或d中之一。
以一下是每次操作中用到的四个非线性函数(每轮一个)。
F(X,Y,Z) =(X&Y)|((~X)&Z)
G(X,Y,Z) =(X&Z)|(Y&(~Z))
H(X,Y,Z) =X^Y^Z
I(X,Y,Z)=Y^(X|(~Z))
(&是与,|是或,~是非,^是异或)
这四个函数的说明:如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。
F是一个逐位运算的函数。
即,如果X,那么Y,否则Z。
函数H是逐位奇偶操作符。
假设Mj表示消息的第j个子分组(从0到15),常数ti是4294967296*abs(sin(i))的整数部分,i取值从1到64,单位是弧度。
(4294967296等于2的32次方)
FF(a, b, c, d, Mj, s, ti)表示 a = b + ((a + F(b, c, d) + Mj + ti) << s)
GG(a, b, c, d, Mj, s, ti)表示 a = b + ((a + G(b, c, d) + Mj + ti) << s)
HH(a, b, c, d, Mj, s, ti)表示 a = b + ((a + H(b, c, d) + Mj + ti) << s)
II(a, b, c, d, Mj, s, ti)表示a = b + ((a + I(b, c, d) + Mj + ti) << s)
所有这些完成之后,将A、B、C、D分别加上a、b、c、d。
然后用下一分组数据继续运行算法,最后的输出是A、B、C和D的级联。
6.2.2异或
此算法对被加密信息中的每一位按照如下原则进行运算:
按这种逻辑,文本序列的每个字符可以通过与给定的密钥进行按位异或运算来加密。
如果要解密,只需要将加密后的结果与密钥再次进行按位异或运算即可。
对于此算法,维基百科中的描述为:
异或运算符常作为更为复杂的加密算法的组成部分。
对于其本身来说,如果使用不断重复的密钥,利用频率分析就可以破解这种简单的异或密码。
如果消息的内容被猜出或知道,密钥就会泄露。
异或密码值得使用的原因主要是其易于实现,而且计算成本小。
简单重复异或加密有时用于不需要特别安全的情况下来隐藏信息。
在本系统中,异或算法作为全文加密时的组成算法使用。
6.2.3 Blowfish
Blowfish算法是一种取代了DES和IDEA的加密算法。
它是一种对称(秘密或个人密钥)的分组密码,使用32位至448位的可变长度密钥,应用于内部加密或加密输出。
(美国政府禁止加密输出软件使用40位以上的密钥,除非软件有特殊用途)。
Blowfish算法是1993年由Bruce Schneier提出的备选加密方法。
32位处理器的诞生后,Blowfish算法在加密速度上超越了DES,引起了人们的关注。
Blowfish算法没有注册专利,不需要授权,人们可以免费使用。
本系统包含有引用/ 使用Blowfish的部分
6.2.4 DES
DES 使用一个56 位的密钥以及附加的8 位奇偶校验位,产生最大64 位的分组大小。
这是一个迭代的分组密码,使用称为Feistel 的技术,其中将加密的文本块分成两半。
使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。
DES 使用16 个循环,使用异或,置换,代换,移位操作四种基本运算。
6.2.5 RSA加密算法
RSA加密算法是一种非对称加密算法,此处省略其具体出处及历史,仅列出流传甚广的。