解密显示特殊字符时的SQL Server 2008 R2加密问题

Fab*_* Ro 4 sql sql-server encryption encryption-symmetric sql-server-2008-r2

我是SQL Server加密的新手,我需要加密我的数据库的一些列.我设法创建了主密钥,证书,对称密钥并加密了我的列,但是当我解密它时,它显示了一些类似于中文的字符,有没有经历过类似的东西?

这是我的代码.

DROP SYMMETRIC KEY CL1AES256Key1;
GO
DROP CERTIFICATE CL1AES256Cert1
GO
DROP MASTER KEY
GO

USE MYDB
GO
IF NOT EXISTS 
(SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
CREATE MASTER KEY ENCRYPTION BY 
PASSWORD = '24RJFEGFJuifjei343'
GO

CREATE CERTIFICATE CL1AES256Cert1
   WITH SUBJECT = 'Encrypting certificate',
   EXPIRY_DATE = '12/31/2030';
GO

CREATE SYMMETRIC KEY CL1AES256Key1
    WITH ALGORITHM = AES_256
    ENCRYPTION BY CERTIFICATE CL1AES256Cert1;
GO

OPEN SYMMETRIC KEY CL1AES256Key1
DECRYPTION BY CERTIFICATE CL1AES256Cert1;
INSERT INTO TMP VALUES(ENCRYPTBYKEY(KEY_GUID('CL1AES256Key1'), 'Yummi'))
CLOSE SYMMETRIC KEY CL1AES256Key1;

OPEN SYMMETRIC KEY CL1AES256Key1
DECRYPTION BY CERTIFICATE CL1AES256Cert1;
SELECT CAST(DECRYPTBYKEY(ENC) as nvarchar) FROM dbo.TMP
CLOSE SYMMETRIC KEY CL1AES256Key1;
Run Code Online (Sandbox Code Playgroud)

这是结果 ??i

如果有人知道我犯了哪些错误,那对我很有帮助.

问候,

法比亚诺

N W*_*est 8

您将加密值强制转换为nvarchar,但在使用insert语句时,指定常规varchar.如果将结果转换为varchar,它应该按预期工作.

此外,如果您在字符串前加上字符N,N'Yummi'那么它也应该有效,因为使用N告诉SQL服务器该字符串文字是unicode.请参阅http://msdn.microsoft.com/en-us/library/ms179899.aspx

你可以在SQL服务器上的字符串排序中找到一个非常大的兔子洞.

http://msdn.microsoft.com/en-us/library/ms143726.aspx