標籤:資料 例子 工具 mes username bak 公開金鑰加密 password 速度慢
一:對稱式加密
原始明文---密鑰---加密資料---密鑰---原始明文
速度快,通過演算法將明文混淆,佔用系統資源少
二:非對稱式加密
加密解密速度慢,較高的系統資源佔用
三:混合資料加密
加密過程:隨機產生對稱金鑰,使用公開金鑰加密對稱金鑰。
解密過程:用私密金鑰解開被加密的對稱金鑰,使用對稱金鑰解密資料
四:備份,還key原服務主要金鑰 (sqlserver伺服器主要金鑰)
備份密鑰
Backup service master key to file =’c:\xx.bak’;
Encryption by password = ‘password’;
執行個體backup service master key to file = ‘D:\work path\dbFile\data.bak‘
encryption by password = ‘test‘
還原密鑰
Restore service master key from file =’c:\xx.bak’
Decryption by password=’password’;
五:建立資料庫主要金鑰(需要手動建立資料庫主要金鑰)
Create master key encryption by password = ‘password’
create master key encryption by password = ‘databaseTest‘
備份資料庫密鑰
backup master key to file = ‘D:\work path\dbFile\database.bak‘ encryption by password = ‘databaseTest‘
六:目錄檢視中查看資料庫密鑰資訊
select * from sys.symmetric_keys
select * from sys.databases --is_master_key_encrypted_by_server 1 表示使用服務主要金鑰對資料庫主要金鑰進行加密
七:建立認證
Create certificate cert_mycert;--建立認證
Encryption by password=’’--建立認證密碼
with subject 標題
建立認證時效性,需要預存程序等方式手動驗證
Start_data=’’ expiry_date=’’
命令如下:
Create certificate myfirst_cert Encryption by password=‘myfirst_cert‘ with subject = ‘myfirst_cert‘, start_date = ‘1/1/2010‘, expiry_date = ‘1/1/2015‘
Create certificate test_cert Encryption by password=‘test_cert‘ with subject = ‘test_cert‘, start_date = ‘1/1/2010‘, expiry_date = ‘1/1/2015‘
查詢認證
Select * from sys.certificates
八:與認證相關的函數
Encyrptbycert(id,’cleartext’);
Cert_id(‘‘myfirst_cert’)
九:建立非對稱金鑰
使用sn.exe工具也可以建立
Create asymmetric key asy_key1 With algorithm = rsa_2048 Encryption by password=‘asy_key1‘
十:建立對稱金鑰
Create symmetric key sy_key1 With algorithm = aes_256 Encryption by password=‘sy_key1‘
Create symmetric key sy_key1_test With algorithm = aes_256 Encryption by password=‘testPassword‘
十一:查詢密鑰
1:開啟密鑰指令
open symmetric key sy_key1 decryption by password =‘sy_key1‘
查詢密鑰
select * from sys.openkeys
關閉密鑰
close symmetric key sy_key1_test
十二:使用祕密金鑰加密資料例子 (加密列不要建立索引,無意義,並且考慮列長度會變長)
declare @oldContent varbinary(200); --定義原始變數
declare @newContent varbinary(200);--定義加密後的變數
set @oldContent = convert( varbinary(200),‘這是測試資料‘);--給原始變數賦值
set @newContent = encryptbycert(cert_id(‘test_cert‘),@oldContent)--通過認證加密資料 test_cert 認證名
select @newContent --加密查詢
select convert(varchar(200),decryptbycert(cert_id(‘test_cert‘),@newContent ,N‘test_cert‘)) as [ts] --解密查詢test_cert 認證名 N‘test_cert‘ 認證密碼
十三:表示例
create table usertest(id int primary key identity(20,1),username varbinary(20),usermoney int)
insert into usertest (username,usermoney) values(‘aaa‘,encryptbycert(cert_id(‘test_cert‘),‘200‘))
insert into usertest (username,usermoney) values(‘bbb‘,encryptbycert(cert_id(‘test_cert‘),‘300‘) )
insert into usertest (username,usermoney) values(‘ccc‘,encryptbycert(cert_id(‘test_cert‘),‘400‘) )
insert into usertest (username,usermoney) values(‘ddd‘,encryptbycert(cert_id(‘test_cert‘),‘500‘) )
正確插入資料
insert into usertest (username,usermoney) values(‘aaa‘,encryptbykey(key_guid(‘sy_key1_test‘),‘200‘))
insert into usertest (username,usermoney) values(‘bbb‘,encryptbykey(key_guid(‘sy_key1_test‘),‘300‘) )
insert into usertest (username,usermoney) values(‘ccc‘,encryptbykey(key_guid(‘sy_key1_test‘),‘400‘) )
insert into usertest (username,usermoney) values(‘ddd‘,encryptbykey(key_guid(‘sy_key1_test‘),‘500‘) )
select id,username,cast(decryptbykey(usermoney) as varchar(20)) as ‘test‘ from usertest
通過驗證器加入資料
加資料方法 Encryptbykey(key_guid(‘認證名字’),加密值,使用驗證器,’驗證器的值’)
insert into usertest (username,usermoney) values(‘aaa‘,encryptbykey(key_guid(‘sy_key1_test‘),‘600‘,1,‘20‘) )
insert into usertest (username,usermoney) values(‘bbb‘,encryptbykey(key_guid(‘sy_key1_test‘),‘300‘,1,‘21‘) )
insert into usertest (username,usermoney) values(‘ccc‘,encryptbykey(key_guid(‘sy_key1_test‘),‘400‘,1,‘22‘) )
insert into usertest (username,usermoney) values(‘ddd‘,encryptbykey(key_guid(‘sy_key1_test‘),‘500‘,1,‘23‘) )
解密方法
Cast(Decryptbykey(解密列1,1,cast(驗證器值 as varcahar(100))) as varchar(200))
select id,username,cast(decryptbykey(usermoney,1,cast(id as varchar(3))) as varchar(20)) as ‘test‘ from usertest
sqlser 2005 對稱式加密,非對稱式加密筆記