我正在使用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