解析数据加密解密原理和方法分析
林秀丽
摘 要:应用数据库的领域越来越广泛,数据的保密机制不可忽视,数据要安全就必须采取相关措施,通常数据加密是数据安全的最后一道关卡。文章主要从教学的角度阐述数据加密原理、数据加密解密方法,避免数据被泄露、被修改。
关键词:数据库;加密;解密
数据的安全措施在现实应用中有很多,如:隔离数据库、角色授权、审核、密码等,本文讲解SQL Server应用中的数据加密[1]。
1 数据加密原理
数据加密是保护数据的一种有效机制。目的是将明文即原始数据转变成不可直接读的密文。原理是:明文同密钥的值捆绑一起经过数学公式处理完成其数据加密,变成密文不可读。接收方若要想读取数据,必须用正确的解密密钥和反向的数学过程完成解密。
加密密钥的长短决定了加、解密运算的复杂性,同时也影响计算机处理时间的长短,以及存储空间与成本。
最主要的加密类型有两种:(1)对称加密。特点是使用相同的密钥进行文件加密和解密,即对称密码编码技术。加解密过程,通信双方都用同一密钥即公共密钥加解密,如:甲、乙通信,甲将自己明文信息用公钥加密成密文,乙收到密文后用公钥解密成明文。常用的加密算法有RC2,3DES,IDEA,AES。密钥短,破译难,使用起来便捷。(2)非对称加密。特点是加解密双方各自有一个密钥对,分别称为私钥和公钥。加解密过程,如甲、乙通信,甲将自己的私钥保密公钥告诉乙,乙也同样保密自己的私钥公钥告诉甲,甲向乙发送信息时用乙的公钥加密,乙收到密文后用自己的私钥解密变成明文。乙向甲发送信息采用相同的方法加解密数据。常用的加密算法有RSA和DSA。非对称加密同对称加密相比,算法强度要复杂得多,因加密与解密密钥不同,一致认为非对称加密比对称加密更安全,但加密速度要慢很多。所以对大量数据进行加、解密时一般使用对称加密。
SQL Server支持3种类型加密,且已内置。对称加密、非对称加密以及另一种形式的非对称加密证书加密。
SQL Server的加密结构是分层进行的,自上而下分别为:WINDOWS级别和SQL Server级别使用服务主密钥对下级的数据库进行加密;数据库级别使用数据库主密钥对数据进行加密。进行加密时,都是上级层使用对称密钥(见图1)、非对称密钥(见图2)、证书的组合对下级层加密[2]。
图2 非对称加密
2 数据加解密方法
数据库的实际应用中常有一些敏感数据,必须要将其加密,避免泄露,如:银行卡卡号、用户的各种密码、职工的工资甚至一些机密文件等。保存加密后的数据,即使被盗了数据,对方也无法查看敏感数据,因没有解密的密钥[3-4]。
以下通过一个案例讲述数据加、解密。本案例的数据库为测试数据库SALES,其中EMPLOYEE职工表中有职工的工资WAGES要保密,通过对称加密算法对WAGES列数据进行加密,步骤如下。
2.1 服务主密钥
服务主密钥是第一次用它来加密其他密钥时自动生成,此密钥是加密保护本地计算机密钥而被使用的。主服务密钥的打开权限只有创建它的操作系统账户或有权限访问服务账户的用户才可以。
2.2 数据库主密钥的创建
数据库主密钥用于数据库级别加密。此密钥不能自动生成,由管理员创建,且主密钥对每个数据库只建一次。代码如下:
use SALES
go
create master key
ENCRYPTION BY PASSWORD=' enter @your@ secret @code.';
2.3 證书APCERT的创建
证书的颁发和签名由证书机构CA完成。证书是验证身份的一种方式,常含有以下信息:证书序列号,是唯一的;证书主题,即标识符信息;证书有效期;证书发行者签名等。
USE SALES ;
go
CREATE CERTIFICATE APCRT
WITH SUBJECT = 'ENTER APCRT PASSWORD!',
EXPIRY_DATE = '2015/1/3';
go
2.4 对称密钥PKEY的创建
对称密钥是用来加密保密数据。使用才创建的证书APCERT,AES 256加密算法对此密钥进行加密。
use SALES
go
create symmetric key PKEY
with algorithm=aes_256
encryption by certificate APCRT;
2.5 打开对称密钥
只有对称密钥打开才能绑定到会话进行数据加、解密。
use SALES
go
open symmetric key PKEY
decryption by certificate APCRT
2.6 加密成密文
用于数据加密的函数ENCRYPTBYKEY(),用于数据解密的函数DECRYPTBYKEY()。两函数使用的都是对称密钥。
—用加密的函数ENCRYPTBYKEY()加密成密文
use SALES
go
create table employee
(Employee_ID char(4)NOT NULL primary key,
password varbinary(500) not null)
go
select * from employee
go
insert into employee values ('E1',ENCRYPTBYKEY(KEY_GUID ('PKEY'),'p@ssword1'))
insert into employee values ('E2',ENCRYPTBYKEY(KEY_GUID ('PKEY'),'pp'))
insert into employee values ('E3',ENCRYPTBYKEY(KEY_GUID ('PKEY'),'aaa'))
go
select * from employee
go
—用解密的函數DECRYPTBYKEY()解密出明文
SELECT Employee_ID ,password from employee
select Employee_ID ,CONVERT (varchar(50),decryptbykey(password)) from employee
go
2.7 关闭对称密钥
注意:加密的函数ENCRYPTBYKEY()同解密的函数DECRYPTBYKEY()只有在密钥打开的情况下才有效。
CLOSE SYMMETRIC KEY PKEY;
GO
3 结语
网络技术、数据库技术都在不断发展,数据库安全是一个永久性问题,入侵技术不断提高,数据库安全技术的提升势在必行。针对数据库安全技术的新问题、新情况,加强研究数据库安全必须首先从一线的课堂教学深入加强,在思想上对安全技术重视起来,让安全技术稳步发展。
[参考文献]
[1]王永乐,徐书欣.SQL Server2008数据库管理及应用[M].北京:清华大学出版社,2011.
[2]李爱武.SQL Server2008数据库技术内幕[M].北京:中国铁道出版社,2012.
[3]俞榕刚.SQL Server 2012实施与管理实战指南[M].北京:电子工业出版社,2013.
[4]徐慧.数据库技术与应用[M].北京:北京理工大学出版社,2010.