2016-11-17 7 views
0

Я хочу использовать шифрование для защиты конфиденциальных данных в моей базе данных. Я уже зашифровал данные в базе данных SQL с помощью Symmetric Key и Certificate с алгоритмом AES_256. Теперь проблема в том, что я не знаю, как обрабатывать часть шифрования/дешифрования в моем приложении ASP.NET. Я могу получить строку от пользователя, и я должен иметь возможность расшифровать строку и проверить, является ли она равным некоторому зашифрованному значению в базе данных. Я получаю ключ отКак получить дешифрованные данные из базы данных?

SELECT KEY_GUID('KeyName')

Мой вопрос заключается в том, чтобы справиться с дешифрования часть в моем жерех приложение с помощью этого ключа. Я попытался использовать this, но он не работает.

+1

ли чувствительные пароли данных? Потому что, если это так, вы делаете это неправильно. Кроме того, алгоритмы шифрования работают по двоичным данным, а не по строкам. –

+0

Это не пароль. Кроме того, я не могу преобразовать строку в двоичную и перейти оттуда. – StefanL19

+0

Ссылка, которую вы опубликовали, предназначена для шифрования .Net, а не для шифрования SQL для шифрования sql, вам нужно открыть симметричный ключ и использовать правильные функции шифрования и дешифрования. Эти функции работают в двоичном формате, но вы можете отбрасывать назад и вперед от других типов данных. Я посмотрю, смогу ли я выкопать пример – Matt

ответ

1
DECLARE @KeyName SYSNAME = 'keyName' 

IF NOT EXISTS (SELECT * FROM sys.openkeys WHERE key_name = @KeyName) 
BEGIN 
    OPEN SYMMETRIC KEY keyName DECRYPTION BY CERTIFICATE certificateName; 
END 

DECLARE @WhatToEncrypt VARCHAR(400) = 'Something To Encrypt can be binary or character' 

DECLARE @EncryptedBinary VARBINARY(MAX) 
SET @EncryptedBinary = ENCRYPTBYKEY(KEY_GUID(@KeyName),@WhatToEncrypt) 

DECLARE @DecryptedBinary VARBINARY(MAX) 
SET @DecryptedBinary = DECRYPTBYKEY(@EncryptedBinary) 

SELECT @WhatToEncrypt as Original, CAST(@DecryptedBinary AS VARCHAR(400)) as EncryptedThenDecrypted 

--may want to add some logic to see if it was open and leave it open 
CLOSE SYMMETRIC KEY keyName 

Шифрование и дешифрование необходимо выполнить с помощью SQL-side NOT ASP.Net, когда вы используете технику шифрования БД, как вы описали. Таким образом, чтобы реализовать на C#, вам придется в основном передавать применимые операторы SQL, как если бы вы выполняли хранимую процедуру или что-то в этом роде.

Я рекомендовал бы хранимые процедуры, чтобы открыть и закрыть ключи, а затем просто использовать функции ENCRYPTBYKEY и DECRYPTBYKEY, как вам нужно сравнить значения и т.д.

Также отметим, что обе функции шифрования могут также иметь данные проверки, передаваемые как соль.

ENCRYPTBYKEY - https://msdn.microsoft.com/en-us/library/ms174361.aspx

DECRYPTBYKEY - https://msdn.microsoft.com/en-us/library/ms181860.aspx

+0

Спасибо, я постараюсь реализовать его таким образом. – StefanL19

Смежные вопросы