SQL证书:C#Encrypt和SQL Decrypt

时间:2016-03-11 21:44:56

标签: c# sql encryption certificate x509certificate

我正在使用SQL创建证书并将其备份到我的计算机上。

然后我安装证书并使用它通过我创建的C#程序加密某些值(或从文章中偷走)。

如果我复制粘贴加密值并尝试在SQL中解密它,那么我得到NULL这意味着它无法解密。

我认为我的问题是C#没有将字节转换为SQL的可识别字符。 有没有办法输出字节,以便我可以将粘贴复制到SQL并正确解密值?

SQL - 创建证书

CREATE CERTIFICATE [MyCert]
    ENCRYPTION BY PASSWORD = 'P@ssw0rd'
    WITH SUBJECT = 'My Sql Certificate'

BACKUP CERTIFICATE [MyCert] TO FILE = 'C:\MyCert.cer'
/* Find certificate and install */

C# - 加密

X509Certificate2 cert = null;
if (this.TryGetCertificate(out cert))
{
    RSACryptoServiceProvider rsaEncryptor = (RSACryptoServiceProvider)cert.PublicKey.Key;
    byte[] cipherData = rsaEncryptor.Encrypt(Encoding.UTF8.GetBytes(PlainRichTextBox.Text), true);
    CipherRichTextBox.Text = "0x" + BitConverter.ToString(cipherData).Replace("-", "");
}

SQL - Decrypt

DECLARE @encrypted varbinary(max) = 0xvalueFromEncryptionApp
DECLARE @decrypted varbinary(max) = DECRYPTBYCERT(cert_id('MyCert'), @encrypted, N'P@ssw0rd')
SELECT CONVERT(varchar(max), @decrypted)

结果

NULL

0 个答案:

没有答案