SQL 服务器 Encryption/Decryption 使用 C#

SQL Server Encryption/Decryption with C#

我正在做一个项目,接下来我想学习的是添加敏感数据,encrypting/decrypting。

我已经使用以下代码完成了这方面的基础知识(使用 SQL 服务器):

--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 服务器对其进行解密,但是我需要在添加数据时在 C# 级别执行此操作。

例如,我有一个 C# Windows 表单,它可以接受名字、姓氏、CredCardNumber)。添加后的数据保存到 SQL 服务器 table,我现在的问题是如何在保存数据时对其进行加密 ,如果我想查看它,我可以一键解密吗(现在)?

感谢您的帮助

--另外 我是一名学生,正在做我的 Final Year Project,所以使用这样的服务会大大降低我的编程分数(虽然对研究方面有好处)本质上我希望能够将某些数据存储在 SQL 服务器 table 已加密,所以除非我写解密语句,否则我无法在 SQL 服务器中看到它。但是由于该应用程序无论如何都需要密码并且将具有权限级别,那么是否有替代解决方案以便我仍然可以 see/add/edit 我的应用程序中未加密的数据?如果你明白我的话?

以及在 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/

我已经使用下面的代码片段加密了我的数据 link:

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");

Triple 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"),它无法被解密