2017-06-20 29 views
0

我已經開始使用下面的鏈接解密列級SQL使用C#加密值

提供的信息閱讀和試驗C#中的加密和解密技術

我已經試過數據加密和解密在SQL Server 2008中

http://www.c-sharpcorner.com/UploadFile/chinnasrihari/data-encryption-and-decryption-in-sql-server-2008/

通過使用下面的查詢(來自實施例鏈接的),我可以能夠使用SQL解密值查詢

OPEN SYMMETRIC KEY Sym_password 
DECRYPTION BY CERTIFICATE Cert_Password WITH PASSWORD = 'Password!2'; 
SELECT CAST(DECRYPTBYKEY([Password]) as varchar(200)) 
FROM Security 
CLOSE SYMMETRIC KEY Sym_password; 

如何從C#應用程序執行相同的操作?

在我的MVC應用程序中,我使用電子郵件地址作爲我的用戶名登錄(默認情況下,使用簡單成員身份對密碼進行散列處理)。請建議我加密SQL級別的電子郵件字段並解密C#(應用程序級別)中的值的最佳方法

當用戶在應用程序中輸入其用戶名(電子郵件)時,如何在應用程序端加密該值,將它與SQL記錄中的加密值進行比較。

+2

對SQL Server 2008的主流支持在兩年前結束。考慮轉移到SQL Server 2016中的列級加密(https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/always-encrypted-database-engine)。這允許通過SQL Server客戶端API完成加密,而不是透明地對您的代碼執行服務器。 –

+0

感謝@DanGuzman提供的信息。但不幸的是,我現在只有2008版。 –

+0

它需要是加密的電子郵件嗎?爲什麼不使用鹽漬散列? –

回答

0
CREATE TABLE [Users] (
    UserID int identity(1,1) primary key, 
    [Login] varchar(32) unique, 
    [Password] varbinary(256) not null, 
    ModifiedDate datetime default (getdate())); 

    DECLARE @EncryptionKey nvarchar(32) = '007London' ; 
DECLARE @Password varchar(32) = 'LoveDanger&Romance' ; 

INSERT [Users] ([Login], [Password]) SELECT 'JamesBond', 
     EncryptByPassPhrase(@EncryptionKey, @Password) 

      select * from Users 

       DECLARE @EncryptionKey nvarchar(32) = '007London' ; 
DECLARE @Password varchar(32) = 'LoveDanger&Romance' ; 

      SELECT [Login], 
     DecryptedClearText= Convert(varchar(32), 
     DecryptByPassPhrase(@EncryptionKey, [Password])), 
     [Password] 
FROM [User]