首先我建议你阅读这篇文章,这是一篇关于什么是对称加密以及如何使用它的非常好的文章。
http://benjii.me/2010/05/how-to-use-sql-server-encryption-with-symmetric-keys/
关于如何在 .Net 中解密数据,请阅读此处:
http://msdn.microsoft.com/en-us/library/te15te69%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
然后,简而言之就是这样:在服务器上创建一个对称密钥,指定一个硬编码的 identity_value 和一个 key_source。在应用程序端,使用相同的 identity_value (IV) 和 key_source (KEY) 值创建对称密钥。
这是一个关于如何在 sql server 和 vb.net 中加密/解密值的示例。希望能帮助到你。 vb.net的例子是基于另一个线程here
================================================ ======================
SQL 服务器:
declare @value varchar(max) = 'I am a very secret value', @encripted_value varchar(max)
--encription on server side
CREATE SYMMETRIC KEY #TempKey
WITH ALGORITHM = AES_128
, IDENTITY_VALUE = 'abcdefgh'
, KEY_SOURCE = 'zxcvzxcv'
ENCRYPTION BY PASSWORD = 'Pa$$w0rd1234';
OPEN SYMMETRIC KEY #TempKey
DECRYPTION BY PASSWORD = 'Pa$$w0rd1234';
SELECT @encripted_value = cast( EncryptByKey(Key_Guid('#TempKey') , @value) as varchar(max));
select @encripted_value
CLOSE SYMMETRIC KEY #TempKey;
DROP SYMMETRIC KEY #TempKey;
--decription in server side, I put it here only for example
CREATE SYMMETRIC KEY #TempKey1
WITH ALGORITHM = AES_128
, IDENTITY_VALUE = 'abcdefgh'
, KEY_SOURCE = 'zxcvzxcv'
ENCRYPTION BY PASSWORD = 'Pa$$w0rd1234';
OPEN SYMMETRIC KEY #TempKey1
DECRYPTION BY PASSWORD = 'Pa$$w0rd1234';
SELECT cast(DecryptByKey(@encripted_value) as varchar(max)) ;
CLOSE SYMMETRIC KEY #TempKey1;
DROP SYMMETRIC KEY #TempKey1;
================================================ ================================
VB.NET
Imports System
Imports System.IO
Imports System.Xml
Imports System.Text
Imports System.Security.Cryptography
Module Module1
Private key() As Byte = {}
Private IV() As Byte = {}
Private Const EncryptionKey As String = "abcdefgh"
Private Const IdentityValue As String = "zxcvzxcv"
Public Function Decrypt(ByVal stringToDecrypt As String) As String
Try
Dim inputByteArray(stringToDecrypt.Length) As Byte
key = System.Text.Encoding.UTF8.GetBytes(EncryptionKey)
IV = System.Text.Encoding.UTF8.GetBytes(IdentityValue)
Dim des As New DESCryptoServiceProvider
inputByteArray = Convert.FromBase64String(stringToDecrypt)
Dim ms As New MemoryStream
Dim cs As New CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Dim encoding As System.Text.Encoding = System.Text.Encoding.UTF8
Return Convert.ToBase64String(ms.ToArray())
Catch ex As Exception
Return vbNull
End Try
End Function
Public Function Encrypt(ByVal stringToEncrypt As String) As String
Try
key = System.Text.Encoding.UTF8.GetBytes(EncryptionKey)
IV = System.Text.Encoding.UTF8.GetBytes(IdentityValue)
Dim des As New DESCryptoServiceProvider
Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(stringToEncrypt)
Dim ms As New MemoryStream
Dim cs As New CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Return Convert.ToBase64String(ms.ToArray())
Catch ex As Exception
Return vbNull
End Try
End Function
End Module