我试图使用证书和对称密钥来加密数据库列。使用证书和对称密钥加密SQL Server数据
我成功创建证书,对称密钥使用如下:
CREATE CERTIFICATE MyCertificate
ENCRYPTION BY PASSWORD = 'password'
WITH SUBJECT = 'Public Access Data'
GO
CREATE SYMMETRIC KEY MySSNKey
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE MyCertificate
我试图加密和利用解密的一些数据如下:
DECLARE @Text VARCHAR(100)
SET @Text = 'Some Text'
DECLARE @EncryptedText VARBINARY(128)
-- Open the symmetric key with which to encrypt the data.
OPEN SYMMETRIC KEY MySSNKey
DECRYPTION BY CERTIFICATE MyCertificate;
SELECT @EncryptedText = EncryptByKey(Key_GUID('MySSNKey'), @Text)
SELECT CONVERT(VARCHAR(100), DecryptByKey(@EncryptedText)) AS DecryptedText
当我这样做,我得到以下错误消息:
该证书具有受用户定义的保护的私钥 密码。需要提供该密码才能启用使用 私钥。
归根结底,我试图做的是写一个存储过程,将需要一些未加密的数据作为输入,对其进行加密,然后将其保存为加密VARBINARY。然后,我想编写一个第二个存储过程,它将做相反的事情 - 即解密加密的varbinary并将其转换回人类可读的数据类型。我宁愿不必直接在存储过程中指定密码。有没有办法做到这一点?我在上面的代码中做了什么错误?
谢谢。
但是,有没有办法,而不在存储过程中指定的密码才能解密? – flayto
您可以将密码传递到存储过程,与使用其他字符串传递的方式相同,如:WITH PASSWORD = @CertPassword。你可以将它存储在调用程序,它的配置文件或任何其他地方,但在某些时候你必须将密码保存在某个地方,除非操作员将手动输入密码。 – SilverbackNet