Universal Data Access Components (UniDAC)是一款通用数据库访问组件,提供了多个数据库的直接访问,如针对Windows的Delphi, C++Builder, Lazarus (以及 Free Pascal) , Mac OS X, iOS, Android, Linux和64和32位的FreeBSD等等。咱们将长期的经验集于这个小组件,提供统一的数据库链接访问(如oracle、微软SQL等等)。这意味着您能够在您的项目之间轻松地切换不一样的数据库,以及建立跨数据库应用程序接口。数据库
UniDAC拥有内置的数据加密和解密算法。要启用加密,应将TCREncryptor组件附加到数据集,并指定加密字段。在表中插入或更新数据时,将按照指定的方法在客户端加密信息。一样,当从服务器读取数据时,组件会“即时”解密这些字段中的数据。安全
对于加密,您应该指定数据加密算法(EncryptionAlgorithm属性)和密码(Password属性)。根据指定的密码生成密钥,对数据进行加密。也可使用SetKey方法直接设置密钥。服务器
存储加密数据时,除了初始数据外,还能够存储其余信息:GUID和散列。(方法在TCREncryptor.DataHeader属性中指定)。oracle
若是数据存储时没有附加信息,则没法肯定数据是否加密。在这种状况下,只应将加密的数据存储在列中,不然,因为没法区分数据的性质,会出现混淆。一样,从信息保护的角度来看,相似的源数据将以加密的形式等价,这是很差的。这种方法的优势是初始数据的大小等于加密数据的大小。ide
为了不这些问题,建议与数据一块儿存储适当的GUID,这对于指定记录中的值是加密的,而且在读取数据时必须对其进行解密是必需的。这容许您避免混淆并将加密和解密的数据保存在同一列中,这在使用现有表时尤其重要。一样,这样作时,在数据加密以前会生成一个随机初始化向量,用于加密。这容许您接收相同初始数据的不一样结果,从而显著提升了安全性。性能
最可取的方法是存储哈希数据以及GUID和加密信息,以肯定数据的有效性并验证其完整性。这样,若是在传输或数据存储的任何阶段试图伪造数据,在解密数据时,都会产生相应的错误。为了计算散列,可使用SHA1或MD5算法(HashAlgorithm属性)。ui
后两种方法的缺点是存储辅助信息须要额外的内存。加密
因为加密算法使用必定大小的缓冲区,而且在存储附加信息时,须要使用附加内存,所以TCREncryptor仅支持对字符串或二进制字段(ftString、ftWideString、ftBytes、ftvarBytes、ftBlob、ftMemo、ftWideMemo)进行加密。若是使用字符串字段加密,首先对数据进行加密,而后将得到的二进制数据转换为十六进制格式。在这种状况下,数据存储须要两倍的空间(一个字节=2个十六进制字符)。spa
所以,为了可以加密其余数据类型(如日期、数字等),须要在表中建立二进制或blob类型的字段,而后在数据映射的帮助下将其转换为客户机端的所需类型。
须要注意的是,在服务器端不可能经过加密字段进行搜索和排序。只有在使用Locate和LocaTex方法对数据进行解密以后,才能在客户端上对这些字段执行数据搜索。排序是经过设置TMemDataSet.IndexFieldNames属性来执行的。
例如:
例如,表中存储了一个企业的员工列表,其中包含如下数据:全名、雇用日期、工资和照片。咱们但愿全部这些数据都以加密形式存储。编写用于建立表的脚本:
1 2 3 4 5 6 |
|
如咱们所见,文本信息、日期和浮点数的存储字段是用VARBINARY类型建立的。这是为了可以存储加密的信息,而在文本字段的状况下——为了提升性能。编写代码在客户机上处理这些信息。
1 2 3 4 5 6 7 8 9 10 11 |
|