繁体   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