簡體   English   中英

使用C#進行SQL Server加密/解密

[英]SQL Server Encryption/Decryption with C#

我正在研究一個項目,接下來我要學習的是有關添加敏感數據以及對其進行加密/解密的知識。

我已經使用下面的代碼(使用SQL SERVER)完成了基礎操作:

--STEP 1, CREATE DATABASE MASTER KEY
USE DatabaseTest
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD='securepassword'
GO

--STEP 2, CREATE A CERTIFICATE
CREATE CERTIFICATE creditcardcert WITH SUBJECT='creditcardcert'
GO

--STEP 3, CREATE SYMMETRIC KEY
CREATE SYMMETRIC KEY CCreditCard_KEY WITH ALGORITHM = triple_des ENCRYPTION BY CERTIFICATE creditcardcert
GO

--STEP 4, CREATE CCEncrypted ENCRYPTED COLUMN
ALTER TABLE Person ADD CCEncrypted varbinary(128)
GO

--STEP 5, ENCRYPT DATA
OPEN SYMMETRIC KEY CCreditCard_KEY 
DECRYPTION BY CERTIFICATE creditcardcert

UPDATE Person SET CCEncrypted = ENCRYPTBYKEY(KEY_GUID('CCreditCard_KEY'), CreditCardNumber)

CLOSE SYMMETRIC KEY CCreditCard_KEY
GO

現在,我知道我可以使用它來加密數據,並且我也可以通過SQL Server查詢解密它,但是添加數據時,我需要在C#級別上執行此操作。

例如,我有一個可以接受名字,姓氏,CredCardNumber的C#Windows窗體。 添加后的數據保存到SQL Server表中, 現在我的問題是如何在保存時加密該數據 ,如果要查看它,是否可以按一下按鈕解密(現在)?

謝謝你的幫助

-另外,我是一名學生在做我的期末項目,因此使用這樣的服務會大大降低我在編程方面的成績(盡管對研究方面有好處)本質上,我希望能夠將某些數據存儲在SQL Server表中,如下所示:加密,所以除非我編寫解密語句,否則我無法在SQL Server中看到它。 但是由於該應用程序仍然需要密碼並且具有權限級別,因此是否有替代解決方案,這樣我仍然可以查看/添加/編輯未在我的應用程序中加密的數據? 如果你得到我?

以及在C#中添加數據的示例:

System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection("SomeConnectionString")

System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandText = "Insert Into Person(Firstname, Surname, CCNumber) Values (@Firstname, @Surname, @CCNumber)";
cmd.Connection = cn;

cmd.Parameters.AddWithValue("@Firstname", txtFirstname.Text);
cmd.Parameters.AddWithValue("@Surname", txtSurname.Text);
cmd.Parameters.AddWithValue("@CCNumber", txtCCNumber.Text); //ENCRYPT ME
try
{
   cn.Open();
   cmd.ExecuteNonQuery();
   lblStatus.Text = "Item Inserted";
}
catch(Exception ex)
{
   lblStatus.Text = ex.ToString();
}
finally
{
   cn.Close(); 
}

我采用了不同的方法,因為這一直都在進行復雜的編碼和解碼,這會使我的系統變慢。 相反,我在前端使用了JavaScript方法,並使用了CryptoJS

https://code.google.com/p/crypto-js/

我已成功使用以下來自上面鏈接的代碼片段對我的數據進行加密:

DES,三重DES DES是以前用於加密的主要算法,已作為正式的聯邦信息處理標准(FIPS)發布。 由於密鑰太小,現在認為DES是不安全的。

default.html代碼

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/tripledes.js"></script>

屏幕代碼

var encrypted = CryptoJS.DES.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.DES.decrypt(encrypted, "Secret Passphrase");

三重DES對每個塊應用DES三次,以增加密鑰大小。 該算法被認為以這種形式是安全的。

default.htm文件

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/tripledes.js"></script>

屏幕創建的代碼

var encrypted = CryptoJS.TripleDES.encrypt("Message", "Secret Passphrase");

var decrypted = CryptoJS.TripleDES.decrypt(encrypted, "Secret Passphrase");

我設法將數據保存為加密數據,然后在視圖,編輯和瀏覽屏幕上進行解密,或者根據用戶權限對其進行解密,也可以對應用程序中的所有數據進行解密。 因此該代碼在數據庫中是安全的,並且在上面的示例中沒有加密密鑰(“ Secret Passphrase”)時,就無法解密

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM