加密数据库程序设计

2025-01-11

加密数据库程序设计(精选10篇)

加密数据库程序设计 篇1

1 概述

从目前来看, 数据库程序通常分为网络版和单机版。对于大型企业的应用程序来说, 采用网络版, 数据库的安全可靠性极高。但对于单机版数据库应用程序来说, 由于用户能够直接接触到数据库文件, 这就给一些人员通过一些工具软件对数据库实现修改、查看、复制等机会, 这就使得数据库的安全受到一定威胁。采用复杂的数据库则又会相对提高了程序设计的复杂程度, 其复杂程度往往超过了应用程序本身, 造成操作冗余, 资源浪费。

采用MDB数据库, 程序设计简单可靠, 而且操作系统自带数据库相关控件, 应用程序简单到只有一个程序文件和一个数据库, 而且可以做成绿色软件, 因此对于应用不太复杂如查询系统、考试系统等等应用软件, 最适合采用这种数据库程序制作。

MDB文件是微软Office Access生成的, 具有结构简单, 易用性强的特点。数据录入时, 可以采用Access进行, 程序运行时则可以完全脱离Office。程序设计也十分简单, 对系统资源要求也不高。但这种数据库的缺点显而易见, 那就是数据库开放性极高, 可以用Access轻易进行编辑, 实现对数据库修改、删除、复制等操作, 尽管具有密码保护, 但是加密算法很简单, 破解MDB数据库密码的工具非常普遍, 可以做到瞬间破解。

如果对数据库中的工作表名、字段名以及每一条记录进行加密, 那么即便知道数据库密码, 可以打开, 得到的也仅仅是乱码, 毫无价值。因此, 采用对数据库内容进行加密, 既能方便使用数据库, 又增强了数据库的安全。

2 基本原理

2.1 数据库本身加密

MDB数据库由众多工作表组成, 每个工作表中又可以有诸如自动编号、整形数值、长整型数、文本、注释、长二进制等等类型的字段, 然后就会有多条记录。数据库程序就是读写数据库中的这些记录, 经过处理后呈现程序界面, 由操作人员进行操作, 然后最终记录到数据库, 这就是数据库应用过程。

在程序处理过程中, 无论数据库是否加密, 所有的操作都是后台进行, 操作人员感知不到。当读取数据库时, 程序将读取的内容进行解密, 解密后进行一系列处理, 得到一定的结果通过程序界面展示出来, 操作员进行相应操作后, 需要写入数据库时, 进行加密操作, 数据库中存储的内容是加密信息。当窥视数据库人员在使用Access打开数据库时, 得到是乱码, 不论是工作表, 还是字段, 还是每一条记录, 全都是加密后的信息。若想得到明文, 就必须知道加密算命法, 然后进行解密。

因为单机版的MDB程序虽然有安全要求, 通常以保护知识产权为目的, 也有的是防止数据被篡改, 一般数据库删除损失不会很大, 但是被复制, 被修改损失较大。总的来说安全要求不是十分高, 过高的要求则通过网络版实现。

如果窥视数据库人员得到密文想要得到明文, 就必须进行解密, 数据库信息量往往很多, 解密就需要重新开发解密程序。不同的加密算法, 不同的加密强度, 导致解密工作能否成功概率不一样。

现成的高强度加密算法种类很多, 但绝大多数过于复杂, 最关键的是仅适合英文字符加密, 并不适合汉字加密。因为要对汉字加密, 介绍的加密算法是针对汉字设计的独创简单算法, 尽管加密强度并不高, 没有高深的数学理论作支撑, 但对于一般单机数据库程序来说加密强度足够了。更强的加密需求则使用网络版, 根本就不让窥视者接触数据库。

加密过程:读取一串需要加密的字符串, 颠倒这个字符串, 例如“昨夜星辰昨夜风, 画楼西畔桂堂东;身无彩凤双飞翼, 心有灵犀一点通。”颠倒之后就变成了“。通点一犀灵有心, 翼飞双凤彩无身;东堂桂畔西楼画, 风夜昨辰星夜昨”, 颠倒后读取每个字符 (一个汉字算一个字符, 不算两个) 的U-nicode代码, 然后进行异或操作得到新的一个数值, 将这个数值转化为字符保存, 实现加密过程。

其中异或操作时, 汉字的Unicode代码和什么数值异或操作呢?这个异或数值可以指定不同值, 而且第一个字符异或数值和第二个、第三个都不同, 程序设计采用“基数+字符串个数*步长=异或数”的机制, 防止固定数值易被解密。对于数据库来说, 数据表名、字段名等长度低于10个字符的, 步长值在5左右, 对于超过10个汉字长度的长文本、备注型字段内容, 步长值最好为0, 因为如果不为零, 可能导致异或数过大, 当与汉字的Unicode代码异或运算之后, 再转换成字符时则超出字符Unicode代码范围, 导致不可以, 最终造成解密失败。

在设计加密算法时, 将某些字符, 特别是英文、数字半角字符, 先用特殊一段字符代替, 然后再进行上述异或运算, 加密可靠性会更强一些, 例程中删除了这段代码。加密代码如下:

上述子程序代码的“异或”值一般取30以内。

解密过程:解密过程和加密过程刚好相反, 因为异或操作可逆, 因此解密算法除了解密后, 再次颠倒字符串顺序。解密代码如下:

对于MDB数据库来说, 工作表名称、字段名称、记录等的加密, 加密时, 异或数、步长选择不同, 增加解密难度。字段编号、字段类型、记录编号都是不同的, 其特征值都可以被程序利用, 可以放入到加密算法里, 为了简单叙述起见, 加密算法中删除了相关代码。

加密后, 数据库可以用Access正常打开, 但是里面全是乱码。很多人员见到乱码, 会以为是汉字BIG5或者UTF-8等编码, 然后找来转换工具转换, 其结果是越弄越乱。

2.2 程序加密

数据库内容进行了加密, 可以初步防止对数据库的窥探, 但是现在跟踪工具程序非常强大, 可以跟踪主程序的运行, 得到解密算法, 毕竟算法不是太复杂。这个时候对程序本身进行加密, 就可以防止算法被逆向推导出来。

简单的程序加密做法是将编译后的可执行文件用UPX压缩, 压缩后得到文件大小, 然后修改源代码中判断文件大小部分, 使得程序运行时判断可执行文件大小, 相同则执行, 不相同则跳入相关处理代码。编译后再压缩, 压缩后用再用二进制编辑器修改可执行文件文件头中的某些内容, 这些内容也是由程序源代码获取, 和程序内置的内容比对, 相同则通过, 不同则跳入相关处理代码。也可以采用MD5校验方式作为程序完整性标示, 有程序判断, 最终决定通过还是跳入相关处理代码。上述指的是进入正常程序, 相关处理代码主要包括提示程序被篡改信息、拒绝执行、自毁等代码组成。例如自毁代码, 采用二进制读写方式, 修改数据库文件, 使之不能被再次使用。修改的位置、内容、偏移量固定, 可以用专门编写的修复程序修复, 否则就是一个坏文件, 没有再次被使用的机会。为了方便起见, 通常修复程序也放在程序界面上, 但是被隐藏掉, 做成类似于复活节彩蛋, 需要特殊的操作才能激活。

3 数据库操作

列出实现不同功能的VB关键代码例程, 代码作用参看代码后面的备注。数据输入数据库之后, 用Access打开数据库文件“data.dat”检查工作表、字段、记录是否被加密。

3.1 创建工作表源代码

本段代码创建一个由操作者指定的工作表名, 同时在工作表下创建4个不同类型的字段名。其中工作表名称、4个不同的字段名称都进行加密处理。

创建数据库出现问题:

3.2 添加记录源代码

数据表、字段设计好之后, 正常使用时是对记录的操作, 下面代码就是添加记录例程。

3.3 其他操作

需要强调的是, 数据库在反复使用后, 体积会庞大, 经常进行数据库压缩也是一个好习惯。数据库压缩过程是先将数据库压缩成一个新的数据库, 然后删除未压缩的数据库, 再将压缩后的数据库改名为原来的数据库。

数据库压缩代码例程:

4 结语

试图通过对数据库内容的加密解密操作, 实现数据库的安全简单化应用, 非常适合于单机版的数据库应用程序, 如模拟考试练习系统、资料收集系统、各类数据库类型的共享软件等, 具有一定的应用价值。加密算法适合汉字加密处理, 虽然算法粗糙简单, 相对于不能加密汉字的著名加密算法来说, 实用性较强。

加密数据库程序设计 篇2

非常简单的,很容易理解。加密与解密的一些方法是非常直接的,很容易掌握,可以很方便的对机密数据进行加密和解密。

一:数据加密方法好范文版权所有

在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的,它既压缩数据又加密数据。又如,的一些软件包总是包含一些加密方法以使复制文件这一功能对一些敏感数据是无效的,或者需要用户的密码。所有这些加密算法都要有高效的加密和解密能力。

幸运的是,在所有的加密算法中最简单的一种就是“置换表”算法,这种算法也能很好达到加密的需要。每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件。加密程序和解密程序都需要一个这样的“置换表”。事实上,系列就有一个指令‘’在硬件级来完成这样的工作。这种加密算法比较简单,加密解密速度都很快,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了。更进一步讲,这种加密算法对于黑客破译来讲是相当直接的,只要找到一个“置换表”就可以了。这种方法在计算机出现之前就已经被广泛的使用。

对这种“置换表”方式的一个改进就是使用个或者更多的“置换表”,这些表都是基于数据流中字节的位置的,或者基于数据流本身。这时,破译变的更加困难,因为黑客必须正确的做几次变换。通过使用更多的“置换表”,并且按伪随机的方式使用每个表,这种改进的加密方法已经变的很难破译。比如,我们可以对所有的偶数位置的数据使用表,对所有的奇数位置使用表,即使黑客获得了明文和密文,他想破译这个加密方案也是非常困难的,除非黑客确切的知道用了两张表。

与使用“置换表”相类似,“变换数据位置”也在计算机加密中使用。但是,这需要更多的执行时间。从输入中读入明文放到一个中,再在中对他们重排序,然后按这个顺序再输出。解密程序按相反的顺序还原数据。这种方法总是和一些别的加密算法混合使用,这就使得破译变的特别的困难,几乎有些不可能了。例如,有这样一个词,变换起字母的顺序,可以变为,但所有的字母都没有变化,没有增加也没有减少,但是字母之间的顺序已经变化了。

但是,还有一种更好的加密算法,只有计算机可以做,就是字字节循环移位和操作。如果我们把一个字或字节在一个数据流内做循环移位,使用多个或变化的方向(左移或右移),就可以迅速的产生一个加密的数据流。这种方法是很好的,破译它就更加困难!而且,更进一步的是,如果再使用操作,按位做异或操作,就就使破译密码更加困难了。如果再使用伪随机的方法,这涉及到要产生一系列的数字,我们可以使用数列。对数列所产生的数做模运算(例如模),得到一个结果,然后循环移位这个结果的次数,将使破译次密码变的几乎不可能!但是,使用数列这种伪随机的方式所产生的密码对我们的解密程序来讲是非常容易的。

在一些情况下,我们想能够知道数据是否已经被篡改了或被破坏了,这时就需要产生一些校验码,并且把这些校验码插入到数据流中。这样做对数据的防伪与程序本身都是有好处的。但是感染计算机程序的病毒才不会在意这些数据或程序是否加过密,是否有数字签名。所以,加密程序在每次到内存要开始执行时,都要检查一下本身是否被病毒感染,对与需要加、解密的文件都要做这种检查!很自然,这样一种方法体制应该保密的,因为病毒程序的编写者将会利用这些来破坏别人的程序或数据。因此,在一些反病毒或杀病毒软件中一定要使用加密技术。

循环冗余校验是一种典型的校验数据的方法。对于每一个数据块,它使用位循环移位和操作来产生一个位或位的校验和,这使得丢失一位或两个位的错误一定会导致校验和出错。这种方式很久以来就应用于文件的传输,例如。这是方法已经成为标准,而且有详细的文档。但是,基于标准算法的一种修改算法对于发现加密数据块中的错误和文件是否被病毒感染是很有效的。

二.基于公钥的加密算法

一个好的加密算法的重要特点之一是具有这种能力:可以指定一个密码或密钥,并用它来加密明文,不同的密码或密钥产生不同的密文。这又分为两种方式:对称密钥算法和非对称密钥算法。所谓对称密钥算法就是加密解密都使用相同的密钥,非对称密钥算法就是加密解密使用不同的密钥。非常著名的公钥加密以及加密方法都是非对称加密算法。加密密钥,即公钥,与解密密钥,即私钥,是非常的不同的。从数学理论上讲,几乎没有真正不可逆的算法存在。例如,对于一个输入‘’执行一个操作得到

结果‘’那么我们可以基于‘’,做一个相对应的操作,导出输入‘’。在一些情况下,对于每一种操作,我们可以得到一个确定的值,或者该操作没有定义(比如,除数为)。对于一个没有定义的操作来讲,基于加密算法,可以成功地防止把一个公钥变换成为私钥。因此,要想破译非对称加密算法,找到那个唯一的密钥,唯一的方法只能是反复的试验,而这需要大量的处理时间。

加密算法使用了两个非常大的素数来产生公钥和私钥。即使从一个公钥中通过因数分解可以得到私钥,但这个运算所包含的计算量是非常巨大的,以至于在现实上是不可行的。加密算法本身也是很慢的,这使得使用算法加密大量的数据变的有些不可行。这就使得一些现实中加密算法都基于加密算法。算法以及大多数基于算法的加密方法使用公钥来加密一个对称加密算法的密钥,然后再利用一个快速的对称加密算法来加密数据。这个对称算法的密钥是随机产生的,是保密的,因此,得到这个密钥的唯一方法就是使用私钥来解密。

我们举一个例子:假定现在要加密一些数据使用密钥‘’。利用公钥,使用算法加密这个密钥‘’,并把它放在要加密的数据的前面(可能后面跟着一个分割符或文件长度,以区分数据和密钥),然后,使用对称加密算法加密正文,使用的密钥就是‘’。当对方收到时,解密程序找到加密过的密钥,并利用私钥解密出来,然后再确定出数据的开始位置,利用密钥‘’来解密数据。这样就使得一个可靠的经过高效加密的数据安全地传输和解密。

一些简单的基于算法的加密算法可在下面的站点找到:

三.一个崭新的多步加密算法

现在又出现了一种新的加密算法,据说是几乎不可能被破译的。这个算法在年月日才正式公布的。下面详细的介绍这个算法

使用一系列的数字(比如说位密钥),来产生一个可重复的但高度随机化的伪随机的数字的序列。一次使用个表项,使用随机数序列来产生密码转表,如下所示:

把个随机数放在一个距阵中,然后对他们进行排序,使用这样一种方式(我们要记住最初的位置)使用最初的位置来产生一个表,随意排序的表,表中的数字在到之间。如果不是很明白如何来做,就可以不管它。但是,下面也提供了一些原码(在下面)是我们明白是如何来做的。现在,产生了一个具体的字节的表。让这个随机数产生器接着来产生这个表中的其余的数,好范文版权所有以至于每个表是不同的。下一步,使用技术来产生解码表。基本上说,如果映射到,那么一定可以映射到,所以(是一个在到之间的数)。在一个循环中赋值,使用一个字节的解码表它对应于我们刚才在上一步产生的字节的加密表。

使用这个方法,已经可以产生这样的一个表,表的顺序是随机,所以产生这个字节的随机数使用的是二次伪随机使用了两个额外的位的密码现在,已经有了两张转换表,基本的加密解密是如下这样工作的。前一个字节密文是这个字节的表的索引。或者,为了提高加密效果,可以使用多余位的值,甚至使用校验和或者算法来产生索引字节。假定这个表是的数组将会是下面的样子

变量是加密后的数据,是前一个加密数据(或着是前面几个加密数据的一个函数值)。很自然的,第一个数据需要一个“种子”,这个“种子”是我们必须记住的。如果使用的表,这样做将会增加密文的长度。或者,可以使用你产生出随机数序列所用的密码,也可能是它的校验和。顺便提及的是曾作过这样一个测试使用个字节来产生表的索引以位的密钥作为这个字节的初始的种子。然后,在产生出这些随机数的表之后,就可以用来加密数据,速度达到每秒钟个字节。一定要保证在加密与解密时都使用加密的值作为表的索引,而且这两次一定要匹配

加密时所产生的伪随机序列是很随意的,可以设计成想要的任何序列。没有关于这个随机序列的详细的信息,解密密文是不现实的。例如:一些码的序列,如“可能被转化成一些随机的没有任何意义的乱码,每一个字节都依赖于其前一个字节的密文,而不是实际的值。对于任一个单个的字符的这种变换来说,隐藏了加密数据的有效的真正的长度。

如果确实不理解如何来产生一个随机数序列,就考虑数列,使用个双字(位)的数作为产生随机数的种子,再加上第三个双字来做操作。这个算法产生了一系列的随机数。算法如下:

如果想产生一系列的随机数字,比如说,在和列表中所有的随机数之间的一些数,就可以使用下面的方法:

××××

××××

××××

××

变量中的值应该是一个排过序的唯一的一系列的整数的数组,整数的值的范围均在到之间。这样一个数组是非常有用的,例如:对一个字节对字节的转换表,就可以很容易并且非常可靠的来产生一个短的密钥(经常作为一些随机数的种子)。这样一个表还有其他的用处,比如说:来产生一个随机的字符,计算机游戏中一个物体的随机的位置等等。上面的例子就其本身而言并没有构成一个加密算法,只是加密算法一个组成部分。

作为一个测试,开发了一个应用程序来测试上面所描述的加密算法。程序本身都经过了几次的优化和修改,来提高随机数的真正的随机性和防止会产生一些短的可重复的用于加密的随机数。用这个程序来加密一个文件,破解这个文件可能会需要非常巨大的时间以至于在现实上是不可能的。

四.结论:

由于在现实生活中,我们要确保一些敏感的数据只能被有相应权限的人看到,要确保信息在传输的过程中不会被篡改,截取,这就需要很多的安全系统大量的应用于政府、大公司以及个人系统。数据加密是肯定可以被破解的,但我们所想要的是一个特定时期的安全,也就是说,密文的破解应该是足够的困难,在现实上是不可能的,尤其是短时间内。

破解数据加密难题 篇3

根据Forrester调研公司2008年初发布的数据,45%的美国公司正在评估或是计划购买磁盘加密软件以防止数据被窃。原因很简单:加密技术可以使得利用偷盗行为获取保密信息的行为变得更困难,比如偷盗笔记本以获取信息。

磁盘全面加密有两种方式:通过计算机硬盘公司提供的硬件形式,尤其是希捷公司;或是也可以作为笔记本制造商提供的选装件,例如联想公司会额外赠送价值25美元~30美元的希捷磁盘全面加密技术作为选装件。所以,现在有~系列的单机加密软件涌现出来。在这个领域的可选项有“Check Point Full Disk Encryption”,GuardianEdge公司的“Encryption Plus Hard Disk”,McAfee公司的“Endpoint Encryption”,PGP公司的“Whole Disk Encryption”和Utimaco Safeware公司提供的“SafeGuard Easy”。Symantec公司的战略则是与GuardianEdge公司达成OEM交易。微软Vista系统的企业版中也包含了一个叫做“BitLocker”的全面加密功能软件。

对于克里斯·肖来说,促使他两年前为笔记本电脑投资购买加密技术的原因非常简单。他创立的技术人员猎头公司S4 Partners Inc.位于加州的El Granada,年销售领200万美元,处理的都是高度敏感的个人信息。所以他选择了Voltage Securiry公司的文件层保护技术,而不是保护他的全部磁盘。

数据库加密系统的分析与设计 篇4

常规的数据库安全主要依赖于数据库管理系统安全和应用程序设计控制,但是后两者一般都存在设计时的固有的缺陷。研究如何保护数据库安全,已经是目前迫在眉睫的问题。数据库中数据是以明文方式存在的[3],即是采用ASCII码明文存储,所以为了更有效地保护数据库安全,需要加密技术对数据库中的数据进行处理[4]。加密技术能够为数据库提供很好的安全性,但是花费在加密和解密上的时间会在很大程度上降低数据库系统的性能。因此,数据库中敏感数据加密系统的研究只是在解决数据库性能和安全性中做出合理的取舍[5]。随着信息量的迅速膨胀,信息安全已成为亟待解决的问题,而数据库加密则是保障信息安全的关键所在。本文从信息技术的安全性出发,阐述了数据库加密的必要性和加密的基本原理,并对SQL Sever数据库系统和Web数据库的加密设计和实现进行了探讨,具有重要的理论意义和现实意义。

1 数据库加密原理数据

加密就是把数据信息即明文转换为不可辨识的形式,即密文的形式,目的是非法人员不能够识别。明文即以ASCII码形式存储的DBF文件,通过特定的加密算法利用加密密钥转换成为不可阅读的密文件后存储在数据库中。这样即使非法人员拷贝或窃取了有关数据,没有解密密钥也是看不到数据内容的。目前常用的密码可包括序列密码、分组密码和公开密钥密码等。三种算法在不同的情况下有着不同的侧重点。

目前常用的数据加密技术主要包括系统内加密、数据库外层加密和数据库内层加密技术三部分。三种技术各有不同的侧重点,因此在应用的时候也是根据具体的数据库特点和应用的需求进行相关的加密处理。数据库加密系统设计的基本要求是对字段或索引进行加密、实现数据库密钥的自动化管理,对于未知的无法识别用户和非法用户可以防止拷贝和篡改数据,保护数据的合理性。

总体来说,一个完整的数据库加密系统技术包括以下几个方面:身份认证、通信加密与完整性保护、数据库数据存储加密与完整性保护、数据库加密设置、系统中可以选择需要加密的数据库列、多级密钥管理模式、安全备份[6]。

2 不同类型数据库加密设计与系统实现

在众多数据库加密系统设计中,本文以SQL Sever和Web数据库加密为例进行探讨。

2.1 SQL Sever数据库系统加密的设计与实现

SQL Sever 2008的透明数据加密功能相对众多加密方法来说是非常完美的。通过对数据的读取和写入存储在数据库中,然后进行加密处理。通常,加密人员不需要利用数据库加密特性来修改应用程序的选择,也不需要重写应用程序和加密代码,因此,SQL Sever的透明数据加密技术相对来说开辟了一个加密技术的新领域。

SQL Sever 2008中的核心部分就是SQL解析模块。SQL解析模块是整个加密系统设计中的关键所在。由于T-SQL语句的语法结构较复杂,所以SQL语句解析模块的设计也是整个加密系统中的一个难点。由于3DES也是基于DES的分组加密算法,其加密时也是按二进制位对明文进行分组,在加密DES模块在设计中,采用ASCII码为0x0o的字符,当解密还原为二进制的字符串后,由于其解密后的字符串也是用0X00填充,所以无需做特殊处理,直接进行类型转换即可保证数据在加、解密前后的一致性[6]。

2.2 Web数据库系统加密的设计与实现

2.2.1 基于B/S模式的Web数据库加密系统结构

基于B/S模式的网络信息系统,不需要开发专用的应用程序,用户通过浏览器实现与服务器的信息传输和访问,数据加密在Web服务器与后台数据库之间实现。加密算法是数据加密的核心,一个好的加密算法产生的密文应该频率平衡,随机无重码规律,周期长而又不可能产生重复现象。数据库索引,亦即选择条件,而条件中的选择项必须是明文,在对数据库加密时,要充分考虑到既要对数据库内容加密又要考虑到对数据库的索引进行相应的加密处理[7]。

2.2.2 Web数据库加密系统的实现

完整的Web数据库加密系统包括以下几大模块:1)用户身份验证模块:采用基于角色的访问控制(RBAC)模型。2)加密和解密模块:数据库的加解密模块是加密系统的关键所在,主要管理存后台数据库信息的加解密处理等内容。3)密钥生成和管理:主要是对是对数据密钥和用户密钥的生成和存储进行存储、管理和分析等。4)数据库连接模块:块由几个Java Bean构成,主要任务是对数据库进行查询、添加、删除和修改等操作同。5)加密字典和管理程序:加密字典通常以配置文件或数据库表形式存在,利用各种索引关系对各种加密文件进行管理、控制和查询处理等内容。

3 结束语

数据库中的重要数据经过加密系统处理后,以密文形式存储,大大增加了安全性。虽然从安全层面对数据进行加密,使得非法用户侵入到系统中来或者是拷贝、窃取数据,增到了数据的安全性,系统发生故障时容易触发数据恢复的危险,数据加密以后也产生了一些新的问题,一方面,数据加密原本就是在数据库性能和安全性之间做出合理的取舍,安全性能增加,其数据库整体性能就会受到一定程度的弱化,所以在实际应用中,应根据具体的应用目的不同而采用不同的数据库加密等级。另一方面,目前通用的数据库加密技术主要为分组加密算法,该算法将加密后的密文重新写在原明文的位置,增大了加密后的明文占用的存储空间,降低数据库的整体性能。

参考文献

[1]糜玉林,朱爱红,李连.一个用于数据库加密算法的研究与实现[J].计算机工程,2005,31(8):131-133.

[2]贾学芳.浅析数据库加密技术[J].科技信息,2009(2):324-325.

[3]刘军.数据库加密技术[J].科技信息,2009(18):174.

[4]张枢.一种数据库加密系统的设计与实现[J].林业科技情报,2008,40(1):62-63.

[5]许方恒.数据库加密模型研究[J].实验技术与管理,2009,26(12):93-95.

[6]楚志凯,吕秀平,路晓亚.SQL Server的数据库加密技术的研究与实现[J].电脑学习,2010(2):97-99.

加密数据库程序设计 篇5

现在大部分研究主要集中在数据库基础设施安全,也就是存储、管理和服务数据的引擎。但我们常常忘了,攻击者的目标是数据。事实上,企业应该更多地专注于保护数据,而不是担心数据库系统。

当你听到“数据库加密”时,你会想到什么?加密静态数据?也许你想到加密的数据库备份,或者对数据库的互联网连接。事实上,数据库加密包括所有这些因素。从安全性、成本和性能方面来看,数据库加密有一些不同的类型。

应用层加密

正如它的名字所暗示的,应用层加密是由使用数据库来存储信息的应用程序来执行。应用程序开发人员通常在发送数据到数据库之前,会利用第三方加密库来加密数据,当从数据库中读取数据时再进行解密。

这种加密方法有几个有点,数据和加密密钥不是存储在数据库,这样,平台或者数据库管理员都不能访问它们,

此外,应用程序开发人员来决定加密的数据,以及细粒度的水平。

不过,这种方法也存在缺点:很难将应用层的加密调整用于传统应用程序;每个读取和写入操作(SQL查询)的数据库必须使用加密,这需要巨大的成本来开发和测试。此外,对于加密的数据,企业不能使用一些数据库功能,例如索引。由于加密输出是随机的,加密数据元素的排序也将是随机的。

最后,加密的数据通常是二进制格式,这意味着表格必须重构为接受二进制,而不是传统的文本、数据或货币数值。总之,应用层加密提供最高的安全性,同时需要付出最高的成本和部署时间。

本地数据库对象加密

所有主流关系型数据库供应商都会提供一种或者多种类型的加密,首先,我们称之为“本地数据库对象加密”,因为加密引擎位于数据库内部。加密属于数据库代码的一部分,你可以将其配置为保护特定的数据库对象(例如表格和模式)。密钥保存在数据库内部,在系统表格中,这样当重新启动时,它们也可以访问到数据库。

本地对象加密的优势是,它是完全自足的加密方法。这种方法对于媒体加密很有效,因为在复制到存储驱动器或磁带备份之前,数据已经被加密了。

加密数据库程序设计 篇6

随着社会科技的不断发展与进步,互联网得到了飞速发展,计算机技术也得到了广泛的应用,但另一方面信息的安全问题却日益突出,信息安全技术应运而生并得到了极大的发展。信息安全技术的核心是数据加密技术,它不仅能够加解密数据,而且还能够鉴别、认证数字签名等,从而使在网络上传输的数据的完整性、确认性及机密性得到了切实的保证。本文将DES算法和RSA算法的优点结合起来,将一个数据加密系统设计了出来,同时将Java安全软件包充分利用起来,实现了数字签名。

1 数据加密技术

1.1 私钥加密体制

私钥加密体制指在加密和解密时所使用的密钥是相同的,由两种类型,分别是分组密码和序列密码。分组密码对明文进行分组的依据是其固定的长度,用同一个密钥加密每一个分组,从而促进等长的密文分组的产生。序列密码又称流密码,因为它将明文数据一次加密一个字节或比特。和序列密码相比,分组密码使用于软件实现,并且具有较快的加密速度,因此在人们的日常工作和生活中得到了极为广泛的运用。

1.2 公钥加密体制

1976年,W.Diffie和Hellman最早提出了公钥体制,利用两个不同的密钥分开加密和解密的能力是该体制最大的特点。公开密钥在加密信息中得到了应用,而使人密钥则在解密信息中得到了应用。通信双方可以直接进行保密通信,而不需要事先交换密钥。同时,在计算机上也不能实现从公开的公钥或密文中将明文或密钥分析出来。

2 数据库“敏感”数据安全加密系统设计

2.1 数据库“敏感”数据安全加密系统的体系结构

该加密系统是在目前较为成熟的仿真网络体系结构HLA的基础上发展起来的,由两部分组成,分别是CA服务器端和客户端。在联邦成员中嵌入加密客户端,可以对各联邦成员之间的“敏感”数据进行加密,CA服务器则可以生成、分发及管理密钥。联邦成员和CA服务器之间及各个联邦成员之间进行通讯的途径是HLA-RTI接口。加密系统体系结构如图1所示。

2.2 数据库“敏感”数据安全加密系统的功能模块

CA服务器端与加密客户端组成了加密系统的功能模块。其中,CA服务器端的主要功能是认证客户端的身份、生成、存储并分发RSA密钥等。密钥是在用户口令字和大数分解理论的基础上生成的,每次有一对密钥(公钥和私钥)产生,用于对会话密钥进行加密和数字签名,也就是对称加密算法AES或DES、3DES算法的密钥;将生成的密钥对和申请者的用户名联系起来,促进一个关联目录的生成,以方便客户端查找即是密钥的存储;依据客户端的请求信息,在关联目录中将与之相匹配的信息查找出来,如果找到的话,就把密钥向请求的客户端发送即是密钥的分发。

加密客户端的主要功能是完成对文件的加密和解密、传输实时数据的加密和解密密文、管理和传输对称加密算法的密钥及和CA服务器交互等。其中,对称加密算法AES或DES、3DES及混沌序列加密算法的密钥均在密钥生成模块生成;密钥的加密传输模块主要是使会话密钥的安全得到切实的保障,也就是说,用公钥密码算法RSA的公钥对会话密钥进行加密,然后一起传输加密后的密钥和密文,在解密端,为了得到会话密钥,可以使用TSA的私钥来进行解密;实时数据的加密和解密模块的基础是混沌特性,在加密或解密实时数据时利用混沌序列密码算法。加密系统的功能模块划分如图2所示。

2.3 数据加密模块的设计与实现

混合加密体制是数据加密系统所使用的,它将对称密码算法具有的较快的贾母速度、较高的加密强度、较高效的加解密大量数据等能力进行了充分的运用;公钥密码算法具有较高的加密强度,密钥便于管理。为了弥补传统密码算法中不便于传递密钥的缺点,可以加密明文的密钥。将二者结合起来,可以实现数据传输的安全性。

2.3.1 3DES算法的设计与实现

目前,虽然DES具有较为广泛的应用范围,并且人们可以很方便地从公开渠道获取,但是因为DES只有56位的密钥长度,易于攻击,其加密强度已经远远不能满足现代安全的需要,因此可以将两个56位的密钥混合起来使用来完成加解密,这样密钥就达到了112位的长度,从而大大增强了加密强度,这就是3DES。3DES的算法原理如图3所示。

图3中密钥K1、K2是随机产生的。

三重DES算法的实现主要包括DES类和THREE类两个类。其中DES类的主要函数是public static byte[]encrypt(byte[]oword64,int[][]i Sub Keys)//加密;public static byte[]decrypt(byte[]b Cipher-text,int[][]Sub Keys)//解密。THREE类的主要函数是public static byte[]encrypt(byte[]oword,int[][]Sub Keys1,int[][]Sub Keys2)//解密;public static byte[]decrypt(byte[]sword,int[][]Sub Keys1,int[][]Sub Keys2)//加密,返回明文。

2.3.2 RSA算法的设计与实现

大数分解是RSA的安全性赖以存在的基础。公钥和私钥都是两个大素数的函数。RSA算法的实现主要包括三个部分,即生成密钥、加密数据和解密数据。在变量的定义方面,在对p、q、n、e、d、t进行定义时,利用Java中的大数Big Interger();在密钥的生成方面,利用publi boolean generate PQNTED(Stringe);在加密数据方面,利用public String Encrypt(String msg、Big Integer pbkey、Big Intiger n),在加密的过程中,在对所要加密的字节数组进行分组时,可以利用转换函数copy Bytes();在解密数据的过程中,利用之前产生的公钥n与私钥d。把所要解密的数据与公钥n与私钥d作为参数向加密函数public String Decrypt(String msg,Big Integer prikey Big Integer n)传递。

RSA只有在大数运算的基础上才能实现,只有这样才能执行大量的大数加减乘除和模逆、模幂运算。这就导致相对于其他特别是对称密钥算法来说,RSA的实现效率十分低下。本文设计的系统中生成的DES密钥用RSA替代的原因也就是这种速度上的差异。

本文设计的数据库“敏感”数据安全加密系统,将数据的加密技术和签名技术综合了起来,一方面解决了密钥的管理问题,另一方面也使数据的不可否认性及完整性得到了切实的保障,同时也将该系统网络通信的程序设计和界面设计方法提供了出来。本系统将集中主要的加密算法进行了具体的分类,使代码的高效性、可扩展性等得到了有效地增强,有利于以后的再次开发。

摘要:本文首先简要阐述了数据加密技术,然后从数据库“敏感”数据安全加密系统的体系结构、功能模块及数据加密模块的设计与实现三个方面,对数据库“敏感”数据安全加密系统设计进行了相关的研究。

关键词:数据库,敏感数据,安全加密系统,设计

参考文献

[1]胡向东,魏琴芳.应用密码学[M].北京:电子工业出版社.2006.

[2]贺雪晨,陈林玲,赵琰.信息对抗与网络安全[M].北京:清华大学出版社.2006.

[3]褚雄,王子敬,王勇.一种基于FPGA的DES加密算法实现[J].江南大学学报(自然科学版),2006,15(6):661—664.

[4]朱作付,徐超,葛红美.基于DES和RSA算法的数据加密传输系统设计[J].通信技术,2010,43(4).

[5]Compag,HewIett-Packard,InteI,Lucent,Microsoft,NEC,PhiIips.UniversaI Bus Specification(Revision2.0)[M].InteI,2000.

一种数据库加密系统的设计与实现 篇7

随着计算机技术的不断推广,信息网络在各企业单位已逐渐普及,企业单位与外界的交流也大多依靠信息网络来完成,计算机技术及网络技术的发展在一定程度上推动了数据库的发展。数据库作为经济活动和日常工作的一种数据管理工具,它可以储存和管理海量数据,随着数据库的不断推广,安全问题已受到社会的深度关注,为了加强企业或单位数据库安全管理,就必须在数据库管理系统中设置一个安全屏障。在传统的加密技术中密钥技术是数据库加密的关键,但系统的性能会随着使用时间的延长而下降,且访问过程也存在诸多不便,本文针对传统加密技术的缺陷研究了一种简单安全的加密方式[2]。

1 数据库加密技术

在数据库中采取加密措施是为了防止信息泄露,而加密程序在数据库中的运用势必会影响到系统运行的速率,所以研究一个简单安全而又不影响系统运行的加密软件,对数据库而言具有非常现实的意义。加密措施的通常是指在系统中设置密码,加密区包括库内和库外两处,而区分库内加密和库外加密的标准则是加密部位和系统分类。

1.1 库内加密

在库内数据加密过程中,数据库加密流程和加密手段都是可见的,只有当系统在核对密码确认用户身份后,用户才能进入数据库获取所需信息,库内加密方式的优点在于加密工作的实施完全是在数据库管理系统中完成,所以库内加密具有较强的稳定性。但它也存在一定的缺陷,如数据库管理系统除了要运行基本程序外,还需对加解密功能进行设置和验证,这个过程对数据库管理系统又造成了一定的负担,系统运行效率也因此而降低。

1.2 库外加密

库外加密是指加解密等操作发生在数据库之外,在库外加密过程中数据库管理系统会对加密部分的数据进行校验和储存,用户端需要借助系统反馈才能实现加解密操作。库外加密的优点是加解密服务器的密钥与信息数据分别储存在两个系统内,而缺陷则是加密功能还不够完善,所以还会存在信息残缺的现象[1]。

2 数据库加密系统的设计

数据系统的信息交流主要是通过密文和明文的转换来实现,如图1所示为系统总体结构图,从图中我们得知数据库机密系统主要包括权限管理模块、密钥管理模块、SQL解析重构模块和加解密模块四个部分。

(l)权限管理模块

权限管理模块主要是针对用户权限检查和限制制度的设置这一部分,而模块功能的发挥主要根据用户安全等级来衡量。

如下所示为安全等级的设置公式:

安全等级设置越高,可进入数据库系统访问的用户就越少。

根据用户操作数据库的方式不同,用户操作可分为可读和可写两种,可读操作主要是通过SELECT方式,而可写的操作方式则更多,如INSERT、DELETE和UPDATE等。而安全等级的划分也通常为可读和可写两类,数据库对象不同安全等级的权限也就不同,一般情况下用户具备的可读安全等级会大于可写安全等级。

(2)密钥管理模块

秘钥管理模块就是管理密文数据库的模块,作为加密技术必不可少的一部分,密钥的设置、保存和获取都需要依靠它,管理区域不同其作用也就不同,数据库中常用的密钥有记录密钥、字段密钥、全局密钥、工作密钥和表密钥等几种。其中字段密钥和全局密钥都是为了保证密钥的安全性和稳定性特意添加的,记录密钥主要负责储存主键字段的所有信息,同时还能避免重复储存,而将密钥和数据分开存放则是提高密钥保密性能的关键。

(3)加解密模块

传统的应用软件需严格遵守流程操作获取数据,而加解密模块在系统中没有直接的数据接口,因而简化了用户获取数据的操作流程,用户在获取解密密钥的过程中需将密钥管理模块和加解密模块数据进行交换和调用,这一环节也使得系统的保密性能有所提升。

(4)SQL语句解析模块

由于加解密模块传输信息的过程都是透明的,为了防止信息泄露,数据库管理系统会将信息进行加密处理,然后以密文的形式发送给用户,SQL语句解析模块可帮助系统实现数据明文与密文的互换[3]。

3 数据库加密系统的实现

本系统选用了Windows XP作为操作系统,管理系统一般采用的是MYSQL5.0,编程语言为Visual C++6.0。系统登录界面由标题栏、状态栏和工具栏三部分组成,而导航栏主要是为用户提供服务平台的浏览窗口,其中数据库表格内的信息都是透明的,结构化查询语言编辑区主要是为用户提供语句输入环境,当用户点击确定按钮就可完成语句输入。

图2所示为新建数据库系统登录的界面,只有在登陆界面对应的地方输入正确的信息,服务器才会将登录请求反馈至系统,登陆成功后系统会跳转至图3的新建数据库界面,然后依次在服务器、端口、用户名和密码处输入正确的信息,才能正式进入数据库系统。

4 总结

随着计算机技术在各领域应用的不断推广,数据库技术在实际运用中也不断暴露出越来越多的问题,为了维护企业利益防止企业内部的重要信息数据泄露,数据库系统的安全性能已成为用户非常航关注的一个问题。本文设计的库内加密与库外加密相结合的方式,不仅保证了系统的安全性能,还具有稳定实用等优势,该系统可对数据库内的重要信息进行了封闭式储存,当用户需从数据库系统中查询或获取信息时,必须通过系统的审核,只有明文批准的用户才能进入数据库系统,另外系统还允许模糊查询,即以密文的形式进入,但获取的信息与明文获取的信息存在一定的区别。

摘要:随着数据库储存容量的不断增大,越来越多信息和重要数据都被储存在数据库系统中,不法用户的窃取以及黑客的攻击为数据储存带来严重的安全隐患。为了降低信息泄露风险维护系统信息安全,本文以某数据库管理系统为研究对象,在该系统中运用加密技术,将重要的数据信息进行加密处理,以降低信息泄露的可能性,并简单的介绍了库内加密技术和库外加密技术以及加密系统的模块组成。

关键词:库外加密,数据库系统,设计与实现

参考文献

[1]朱勤,于守健,乐嘉锦,骆轶姝.外包数据库系统安全机制研究[J].计算机科学,2007,34(2):152-156.

[2]马兴涛.数据库透明数据加密技术的研究与应用[J].数字社区&智能家居,2011(5).

加密数据库程序设计 篇8

关键词:气象数据,数据库,存储过程

气象资料是地球系统科学数据的重要组成部分,是国家重要的公益性资源,具有重要的应用价值。随着气象现代化的建设,目前各级气象部门的业务及服务平台都已基本建成,实现了气象资料的自动传输。过去大量的气象资料通常以各类文本方式存储于FTP服务器中,不利于气象资料的查询、统计与使用,各用户使用时工作量大,而且容易发生错误。因此,从实际工作出发,针对全省各类气象资料建立一个统一的SQL Server 2005的数据库,利用SQL数据库强大的管理、查询、统计与存储功能,来为气象业务和服务提供先进、及时的气象数据。

1 数据库资料的获取

我省气象探测资料,主要是CAWS600系列的大监项目有人值守自动气象站和以两要素、四要素、六要素组成的无人值守中尺度加密站组成。其中,CAWS600系列的自动气象站,包含的要素最全,其传输是通过FTP方式向省局服务器传输国家局定义好的文本文件。各类中尺度无人值守加密站,则是通过GPRS方式向省局中心站服务器传输UDP数据包,中心站服务器端需要加载UDP包的接收程序进行获取和解析。

1.1 CAWS600型自动气象站资料的获取

CAWS600型自动气象站向中心站传输实时的Z文件,文件名中包含区站号和观测时间以及文件的类型。我们在中心站FTP服务器中开发一个Win32的文件分捡程序,对收到的各类文件进行分类,分别复制到一个我们自定义的一个文件夹内,等待入库程序的处理。

1.2 中尺度加密站资料的获取

中尺度加密站的资料,我们需要在中心站服务器端加载一个开发好的Win32程序来截取UPD数据包,然后根据已经定义好的规则进行解析,生成一个一个的文本文件,复制到另一个文件夹中,等待入库程序的处理。

2 SQL Server 2005数据库的介绍

SQL Server 2005是一个全面的关系型数据库平台,是由Microsoft公司开发的,使用集成的商业智能工具提供了企业级的数据管理。数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和高性能的数据应用程序。

2.1 SQL Server数据库的特点

2.1.1 高可用性

SQL Server的失败转移集群和数据库镜像技术确保企业向员工、客户和合作伙伴提交高度可靠和可用的应用系统。

2.1.2 管理工具

SQL Server引进了一套集成的管理工具和管理应用编程接口(APIs),以提供易用性、可管理性及对大型SQL Server配置的支持。

2.1.3 安全性增强

SQL Server旨在通过数据库加密、更加安全的默认设置、加强的密码政策和细化许可控制、及加强的安全模型等特性,为企业数据提供最高级别的安全性。

2.1.4 可伸缩性

SQL Server可伸缩性的先进性,包括表格分区、复制能力的增强和64位支持等。

2.2 存储过程的应用

2.2.1 存储过程的概念

存储过程是由SQL语句和流控制语句写成的过程程序,经数据库编译和优化后存储在数据库的服务器中,可被其它程序调用执行,允许多个用户访问相同的代码。它提供了一种集中一致的实现数据完整性逻辑的方法。可用于实现频繁使用的查询、业务规则和被其它过程使用的公共例行程序。

2.2.2 存储过程的用途

存储过程的用途是相当强大的。从返回SELECT语句的结果并用于用户报表到执行复杂的数据有效性校验都可以用存储过程。

2.2.2. 1 模块化的程序设计

在创建了一个存储过程后,它就会存储在数据库中并能通过应用程序多次调用它。这些过程能封装数据库功能,也能被应用程序代码独立地修改,只要应用程序知道被返回的数据将要做什么。该模块可以被很多用户重用,也可以被很多用户共享。因此,存储过程可以增强代码的重用性和共享性,加快应用的开发速度,提供开发的质量和效率。

2.2.2. 2 快速执行

当存储过程被编译并存储在高速缓冲中时,能以相当高的效率执行。因为第一次执行后的存储过程会在缓冲区中创建查询树,使第二次执行时不用进行预编译,从而加快速度。

2.2.2. 3 减少网络通信量

因为存储过程存储在服务器上,并在服务器上运行。只有触发执行存储过程的命令和返回的结果才在网络上传输。客户端无需将数据库中的数据通过网络传输到本地进行计算,再将结果数据通过网络送到服务器。所以,可以减少网络流量。

2.2.2. 4 使用存储过程保证安全性

因为在进行用户授权时,可以不授予用户访问存储过程中涉及的表的权限,而只授予访问存储过程的权限。这样,既保证了用户通过存储过程操纵数据库中的数据,又保证了用户不能直接访问与存储过程相关的表,从而保证表中数据的安全性。

3 在Delphi中使用存储过程的方法

在Delphi中使用存储过程的实现步骤:把TADOStoredProc放到窗体上,设置参数连接到MS SQL Server数据库和ProcedureName参数,指定存储过程名,在代码中设置存储过程的输入参数,执行存储过程并获取返回的数据。

通过调用TADOStoredProc控件的parambyname方法,设置好所有的输入参数,再调用open方法执行存储过程。如果存储过程返回参数,同样用parambyname方法获取参数值。如果返回数据集,则用访问数据集的TFields的方法获取各记录。如以下代码所示:

4 数据库的设计

由于自动气象站的数据量庞大,每分钟一个数据量,对于这样的海量数据如何存储,就成为设计的难点之一。设计的数据库,要求使用方便,利于统计与存储,并且需要有较高的效率。

4.1 台站参数表的建立

列举台站参数表中的部分字段值如下:

其中,将[StationID]字段设为索引字段和主键。索引能大大加快数据的检索速度,主键可以确保执行数据更新、删除的时候不会出现错误。

4.2 资料库的建立

自动气象站的资料,按年份建立不同的数据库,每年一个库,这样的优点是库不会无限制的增大,也利于数据库的存储与转移。在库中,再通过分类建立各数据表。结构如图1所示。

4.3 资料库数据的查询

数据库的查询,通过调用在AhGis库中的返回结果集的存储过程来进行,不同的时间段,通过对时间的解析来查询不同的数据库表。存储过程的调用,通过执行EXECUTE语句来实现,执行后用CLOSE语句来关闭。执行的结果通过ASP方式显示于网页中,或者被其他用户调用。显示结果如图2所示。

5 结束语

本设计项目中,通过合理地设计SQL Server 2005数据库,解决了数据库的存储,并提高了数据查询的效率。利用SQL数据库强大的管理、查询、统计与存储功能,来为气象业务和服务提供先进、及时的气象数据。

参考文献

[1]Mike Gunderloy, Joseph L Jorden, David W Tschanz, 等.SQL Server2005从入门到精通[M].北京:电子工业出版社, 2006.

[2]王能斌.数据库系统原理[M].北京:电子工业出版社, 2000.

[3]中国气象局.地面气象观测数据文件和记录簿表格式[M].北京:气象出版社, 2005.

[4]Charlie Calvert.Delphi4编程技术内幕[M].北京:机械工业出版社, 1999.

加密数据库程序设计 篇9

现在市面上有很多的数据加密产品, 按照加密方式主要分为软件加密和硬件加密。 软件加密的特点是:成本低、 效率低、 安全性低。 硬件加密的特点是: 成本高、 效率高、安全性高。 但是很多硬件加密产品的可扩展性比较差、没有丰富的外围接口。 另外,如果要将数据加密产品应用于军事、政府等敏感部门,国外的产品不可信, 而国内产品可选择范围又比较小。

由于经济和政治等多方面数据安全的重要性, 最近几年国家大力支持国产IC的研发与推广。 在此背景下, 本单位研发了一款具有自主知识产权的密码SOC(Sys- tem On Chip ) 芯片HX680 。 该芯片最主要的特点是内部集成了一个具有完全自主知识产权的协处理器,具有对称和非对称密码服务功能。 该芯片还有相对比较丰富的外围接口,可以进行扩展和外部通信。

SD卡作为存储设备, 具备很多其他存储设备没有的特点, 如体积小、 功耗低、 容量大等[1], 其应用范围日益扩展, 因此在本设计中使用SD卡作为存储设备。 Fat Fs是一个为小型嵌入式系统设计的通用FAT系统模块, 具有开源、 不依赖于平台、 易于移植、 代码和工作空间非常小等特点,作为本设计的文件系统是一个很好的选择[2]。

主控芯片内部没有集成实时时钟(Real-Time Clock , RTL ) , 需通过外挂时钟芯片DS3231来解决文件系统获取时间信息的问题。 主控芯片没有时钟芯片DS3231需要的I2C通信接口,需通过GPIO口的模拟来实现。

1系统硬件设计

HX6801具有完全的自主知识产权, 集成了国产32位RISC结构嵌入式处理器CK520[3],具有专用软件集成开发环境和可扩展指令。 协处理器具有硬件资源可配置、 功能单元可重构、 高性能、 二次开发简便灵活等特点,HX6801适用于数字签名与身份认证、 存储保护、 数据传输、 嵌入式控制等多种领域。 系统采用HX6801作为主控芯片, SD作为存储设备, 由DS3231提供文件系统需要的时间信息。 HX6801芯片总体架构如图1所示。

1 . 1 DS3231接口电路

DS3231是一款高精度I2C RTC器件, 具有集成的温度补偿晶体振荡器(TCXO)。 该器件包含电池输入端,断开主电源时仍可保持精确计时。 集成的晶体振荡器可提高器件的长期精确度。 DS3231的寄存器能保存秒、 分、 时、星期、日期、月、年和闹钟设置等信息。 少于31天的月份,可自动调整月末日期,包括闰年补偿。 时钟的工作格式为24小时或带AM/PM指示的12小时格式。 DS3231与主控芯片通过I2C双向串行总线传输地址与数据。 DS3231的年误差小于1分钟[4]。

主控芯片HX6801没有I2C接口, 所以使用GPIO口模拟I2C的时序,DS3231接口电路如图2所示, 图中工作电压VCC的工作范围是2.3 V~5.5 V,典型的工作电压为3.3 V,TR表示信号SDA和SCL的上升时间,CB表示总线负载电容。

1 . 2 SD卡接口电路

SD卡支持SD模式和SPI模式两种通信模式。 在综合考虑速度和设计复杂度的基础上,本设计选用SPI通信模式。 SPI通信模式只需要将片选引脚、数据输入引脚、数据输出引脚、时钟引脚与主控芯片上对应的引脚连接即可[5]。

2软件设计

软件部分采用了分层设计。 主要包括4个部分: 应用层、加/解密层、文件系统层、硬件驱动层( 包括DS3231驱动程序和SD卡驱动程序)。 应用层用来产生需要加密及解密的数据; 加/解密层主要依据密码算法编程手册及编程工具,采用专用的密码指令编写相应的密码算法并配置协处理器; 文件系统层主要实现Fat Fs文件系统的移植; 硬件驱动层主要实现对最底层硬件的控制。 层次结构如图3所示。

2 . 1加解密层

可重构安全算法协处理器遵循了超长指令字的计算机体系结构, 针对密码运算, 提取了密码算法共性逻辑, 提出并设计具有指令级可重构能力的专用指令系统和具有指令级并行处理能力的协处理器体系结构。 该协处理器具有对称和非对称密码服务功能; 具有专用密码处理指令, 支持密码算法软件编程, 能够灵活实现分组密码、序列密码与对称密码算法;可动态加载算法程序、 参数,实现密码算法的重构与更换。 下面以高级加密标准(Advanced Encryption Standard ,AES) 算法为例, 介绍完整的算法处理流程,如图4所示。

2 . 2文件系统层

Fat Fs是一个专门为小型嵌入式系统而设计的Fat文件系统, 完全兼容ANSIC, 而且不依赖于任何的平台。Fat Fs的设计像很多软件一样采用了分层设计[6], 最顶层的应用层为用户提供了操作底层硬件的API接口函数;中间层实现Fat Fs文件系统的协议;最底层是和具体的硬件相关的模块,需要用户编写代码。

Fat Fs移植包括SD卡disk I / O编写, RTC时钟函数编写,interger.h文件中数据类型和工程中数据类型的匹配,ff.h中条件编译的配置[6]。

Fat Fs支持Fat12 、 Fat16 、 Fat32文件系统。 Fat32文件系统将SD卡划分为4个连续的逻辑结构:主引导记录、 磁盘操作系统引导记录、文件分配表、数据区。

主引导记录(Master Boot Record ,MBR) 让硬盘具备可以引导的功能。

分区表(Disk Partition Table ,DPT)用来表示磁盘可以分多少个分区。 DPT部分共有64 B,DPT1~DPT4代表4个分区,每个分区16 B。

磁盘操作系统引导记录(DOS Boot Record ,DBR ) 包含了文件系统相关的详细信息。

磁盘分区的数据区空间是以簇为单位寻址的。 簇的大小一般是2N个扇区( 本设计中N=3), 一个文件可以占用多个簇, 有可能同一个文件占用的簇是不连续的, 这就体现了FAT的价值。 FAT就是用于存储文件占用的所有簇的序号。 Fat32和Fat12、Fat16的一个重要区别就是根目录(File Directory Fable,FDT) 是数据区的一个子集,被当成文件对待[7]。

DPT 、 DBR 、 FAT及数据区四个区域首地址之间存在一定的逻辑关系,如图5所示。 逻辑推导过程如下:

数据区第3簇首地址

DATA_CLUSTER_ADDR = DATA_ADDR + ( 3 - 2 ) *8sector / cluster*512byte / sector = 0x3c2e00byte

文件、文件分配表、文件目录、数据区的簇之间的关系决定了文件的存储方式。 如图6所示, 两个文件对应FAT表中两个链表0x00000004 - 0x00000007 - 0x00000001 - 0x FFFFFFFF (file1) 和0x00000005-0x00000003 -0x00000008 - 0x FFFFFFFF ( file2 ) 。

2 . 3 DS3231驱动

DS3231芯片采用I2C作为通信接口, 设计中用GPIO口模拟I2C时序。 I2C总线上传输的地址帧长度为9位, 它包括7个地址位 、1个位和1个应答位 。 如果为1 , 则执行读 操作 ,为0 , 则执行写 操作 。 I2C总线上传 输的数据 帧长度为9位 ,它包括8个数据位 ,1个应答位 。

DS3231寄存器地址为00H ~ 12H , 数据在寄存器中的存储格式为BCD码,每个存储单元大小为1 B。 DS3231的寄存器00H~06H存储时间信息[8],存储格式如表1所示。 DS3231的操作主要包括时间的读和写如图7所示。

Fat Fs系统中时间对应的数据结构存储在一个32位的无符号整数当中, 数据存储格式如表2。 时间信息从DS3231存储格式到Fat Fs存储格式要经过从BCD码到十进制数的转换。

2 . 4 SD卡驱动

SD卡经过多年的发展, 经历了好几次升级, 如果驱动程序要兼容各个版本, 就要考虑到各个版本的特殊性, 从初始化流程图可以看出版本1.x和2.0在初始化阶段的不同点。 SD卡根据容量的大小可分为不同的等级, 2 GB以内( 包括2 GB ) 称为标准卡, 大于2 GB小于等于32 GB称为大容量卡, 不同等级的卡操作细节也不尽相同。 SD卡在初始化阶段会判断是否支持大容量卡[4]。

SD卡的驱动主要包括SD卡的初始化及数据块的读写等几个部分。 SD卡的SPI模式初始化流程如图8所示。

从流程图可以看出, 该设计对SD卡2.0版本向上兼容,同时支持大容量SD卡。 SD卡上电的时候默认的是SD模式, 当主控芯片发送复位命令(CMD0) 的时候, 保持片选信号足够的时钟周期(74个以上),SD卡可以进入SPI模式。 CMD8命令向SD卡发送接口状态(主控芯片提供的电压是否满足SD卡的需求),ACMD41向SD卡发送主控芯片支持的SD卡容量并获取相应的回复。 CMD58命令获取SD卡操作状态寄存器(Operating Condition Register , OCR ) 的值并读取CCS位( Card Capac- ity Status ) 判断是否支持大容量的SD卡。

SPI模式支持块读( CMD17 ) 和多块读( CMD18 ) 操作。 SD卡接受到有效的读取命令后,要回复一个应答信号和相应的数据。 需要注意的是,标准容量的卡读取的数据长度可以通过CMD16来设定(大小为1 B到512 B之间), 大容量卡的数据长度固定为512 B。 SPI模式同样支持块写(CMD24)和多块写(CMD25) 操作, 数据长度要求同读要求相同。 每个数据块开始都应该有1个块起始位(大小为1位)。 其中读操作采用的是命令( 主机)- 应答(SD卡)-数据(SD卡)的模式读取数据。 写操作采用的是命令( 主机) - 应答(SD卡) - 数据( 主机) - 应答( SD卡) 的模式。

3测试结果

协处理器的性能及接口的速度是影响本设计的关键, 鉴于各种密码算法自身的特点, 处理器表现的性能有所差别,经测试以下几种算法性能如表3所示。

在将主控芯片的外设总线(Advanced Peripheral Bus , APB ) 设为40 M的情况下, 加密并存储10 MB的数据需要的时间为3.4 s, 读取并解密10 MB的数据需要的时间为3.9 s。

4结论

经过多方面的理论分析和实验验证, 本设计可以很好的实现数据的加/解密及数据的存储。 在试验中可注意到, 系统在处理大批量数据的时候效率不是太理想。 所以为了进一步优化性能,下一步将研究如何优化加密算法,在SD卡及主控芯片允许频率范围内,尽可能提高APB时钟频率。

参考文献

[1]苏义鑫,程敏,何力.基于AT89C52单片机的SD卡读写设计[J].世界电子元器件,2008(5):65-68.

[2]陈祖爵,蒋仕俊.智能遥控器SD卡文件系统的设计与实现[J].计算机工程与设计,2007(10):4716-4718.

[3]阳晔.面向嵌入式处理器的代码压缩研究[D].杭州:浙江大学,2007.

[4]DS3231 Extremely Accurate I2C-Integrated RTC/TCXO/Crystal.[DB/OL].http://www.Maximintegrated.com/cn/products/digital/real-time-clocks/DS3231.html#popuppdf.

[5]葛建,董浩斌,郑海兵.嵌入式SD卡存储器的设计[J].电子技术应用,2010(5):139-142.

[6]程小燕.嵌入式STM32F107VCT6微处理器接口模块开发及应用研究[D].合肥:合肥工业大学,2012.

[7]刘思伽.基于SD卡的数据恢复技术研究[D].成都:电子科技大学,2010.

加密数据库程序设计 篇10

目前,数据的存储安全和通信安全已成为信息安全领域研究的热点。数据加密是保证敏感数据机密性的常用方法。数据加密有软件加密方法和硬件加密方法。软件加密方法的优点是灵活,缺点是需要消耗大量的处理器资源,速度慢,容易被跟踪调试和破解,安全性较低。

鉴于软件加密方法的缺点和PCI接口的通用性,人们研究并提出了基于PCI总线的硬件加密方法。文献提出了一种基于PCI的硬件加密模型。文献给出了一种PCI总线数据加密卡及驱动程序设计方法,但其加解密速率低于1.5Mbps,难以满足批量数据加解密应用需求。文献设计的PCI加密卡采用3DES加密算法,缺乏对高级加密标准(AES,Advanced Encryption Standard)的支持,安全性有限。而另一方面,上述设计所采用的PCI-133接口正逐渐被高速的PCI-E接口所取代。

针对现有方法的不足,本文提出了一种基于PCI-E总线的高速数据加密卡设计及实现方案,采用低端FPGA器件实现了AES强加密算法及32位CR校验算法。实验表明,PCI数据加密卡接口通信速率达到134MBps,加解密速率约为48MBps,安全性很高,能防止存储的数据非法拷贝、处理及通信中数据泄密的问题。

1 数据加密卡结构

PCI-E数据加密卡需完成系统总线到本地总线的接口和电气特性转换,并实现协议规定的配置、I/O及存储器空间;接收主机发送的数据,对其进行加解密和校验运算,并将加解密结果及校验信息返回给主机。其系统结构如图1所示。

1)PCI-E总线接口控制器:实现PCI-E总线到本地总线的转换,管理配置、I/O和存储器空间,完成主机地址空间与本地地址空间之间的地址映射;

2)本地总线控制器:完成本地总线与密码算法核及CRC模块间的数据传输,加密运算时,将明文数据写到输入FIFO和CRC模块,并从输出FIFO读取加密结果,从CRC模块读取校验值;解密运算时,将密文数据写到输入FIFO,将从输出FIFO读取的解密结果发送到本地总线和CRC模块,并在解密

完成后从CRC模块读取校验值;

3)密码算法核:采用Rijndael算法,实现对数据的加解密操作;

4)CRC模块:采用32位校验算法,提供数据完整性校验信息,防止对数据的非法篡改。

2 数据加密卡硬件设计

2.1 PCI-E总线接口设计

PCI-E总线属于高速串行总线,采用低压差分信号(LVDS,Low Voltage Differential Signal)进行数据传输。PCI-E总线接口有三种常见的设计方案,一是PCI-E接口控制器IP核在高端FPGA芯片中实现;二是采用模拟收发器进行数据的串并转换,然后由嵌入式处理器/控制器实现总线协议的处理;三是采用专门的PCI-E接口控制器芯片实现。方案一对FPGA芯片的性能要求很高,从而设计成本较高。方案二的总线协议处理部分设计复杂度较高,且容易对用户功能模块造成影响。出于设计复杂度、可靠性及成本方面的考虑,本文选用第三种实现方法,将设计重点放在与数据加密功能相关的模块上。

本文选择PLX公司的PEX8311芯片作为PCI-E总线接口控制器。由于该芯片提供了配置、IO和存储器空间管理功能,用户只需对其本地总线接口进行读写即可实现与主机间的数据传输,图2给出了PEX8311与FPGA的接口方式。

2.2 本地总线控制器设计

本地总线状态机是本地总线控制器的核心,其划分为空闲(IDLE)、总线保持(AHOLD)、读数据(READ)、读结束检测(RLAST)、写数据(WRITE)、写结束检测(WLAST)和总线保持等待(WHOLD)七个状态。图3为本地总线状态机状态转换图。

本地总线状态机状态跳转方式如下:

1)系统上电复位后,状态机处于空闲态,等待主机发起读写操作。当PEX8311的本地总线请求信号LHOLD有效时,表明主机发起一次数据传输,状态机进入总线保持状态;

2)总线保持状态下,若ADS信号有效,总线传输进入地址周期,此时,若LWR信号为低则表明主机发起读操作,状态机转到读数据状态,否则,进入写数据状态;

3)读/写数据状态下,本地总线控制器置READY信号有效,处理数据和奇偶校验信号,完成一个数据周期,并在下一周期相应跳转到读/写结束检测状态;

4)读/写结束检测状态下,若BLAST信号有效,表明本次读写操作已完成,状态机进入总线保持等待状态,否则,返回读/写数据状态继续进行数据传输;

5)总线保持等待状态下,若LHOLD信号无效,则表明主机不会发起连续的读写操作,状态机返回空闲状态,否则,直接转到总线保持状态,等待主机发起下一次数据传输。

2.3 密码算法核设计

密码算法核采用Rijndael算法,工作于加解密速度较快的ECB模式。设计中,采用RAM存储扩展密钥,并在将扩展密钥写入RAM的同时,将加解密首密钥写入寄存器,并以流水线方式读取当前轮密钥,从而避免了读RAM的数据延迟问题。SubBytes变换和ShiftRows变换采用查表方式实现,实现时将SubByte与ShiftRows合为一体,使两部分延时仅取决于SubBytes变换的ROM。MixColumns变换参考文献给出的方法对矩阵乘法进行了展开和合并,节约了硬件资源,为提高整个设计的时钟频率提供了保障。

3 系统实现及性能测试

3.1 实现

PCI-E数据加密卡采用低端FPGA芯片EP1C6Q240C8。加密核的工作时钟设置为100MHz,本地总线控制器工作于66MHz时钟,两者之间采用异步FIFO进行时钟域隔离。设备驱动程序和上层应用程序的开发环境分别为Kernel Driver6.11和VisualC++6.0。

3.2 结果及分析

前端设计完成后,将其下载到PCI-E数据加密卡上进行加解密速率测试。本文测试分两部分:1)PCI-E接口传输速率测试,相应的测试工具为Signal Tap II嵌入式逻辑分析仪;2)对改进前后的文件加解密速度作了对比测试。测试1)显示本地总线READY信号的频率为33.6MHz,即本地总线的平均数据传输速率为33.6*32/8=134.4MBps。测试2)即改进前后的加解密速率对比测试结果由表1给出。

4 结束语

本文创新点:对PCI-E总线接口的设计方法进行了研究,高速硬化实现了AES密码算法和CRC校验算法。实验结果表明本系统具有加解密速度快,密码算法强度高,加密运算不占用处理器资源,设计成本低等优势。研究和设计成果被某无人机所采用,初步经济效益为6.5万元。

摘要:本论文针对数据的安全存储、安全传送及安全处理的需求,设计了基于PCI-E总线的高速数据加密卡。在该设计方案中以FPGA为载体,实现了AES加密算法及32位CRC校验算法。实践表明本设计具有加解密速度快、安全性高和通用性好的特点。

关键词:PCI-E,数据加密卡,FPGA,AES,CRC,ECB

参考文献

[1]鲁群,仲红,谢荣传.基于PCI的硬件加密模型设计[J].微计算机信息,2008,11-3:46-47.

[2]袁亮,古天祥,徐三林.基于PCI总线的数据加密卡及驱动程序设计方法[J].电子测量与仪器学报,2005,6:106-109.

[3]PCI Special Interest Group,PCI Express Base SpecificationVersion 2.0[S],2006.

上一篇:遗产特征下一篇:相关阐述