sqlser 2005 對稱式加密,非對稱式加密筆記

來源:互聯網
上載者:User

標籤:資料   例子   工具   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 對稱式加密,非對稱式加密筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.