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

标签 sql sql-server encryption sql-server-2008-r2 encryption-symmetric

我对 SQL Server 加密很陌生,我需要加密数据库的某些列。我设法创建了主 key 、证书、对称 key 并加密了我的列,但是当我解密它时,它显示了一些类似于中文的字符,有人经历过类似的情况吗?

这是我的代码。

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;

这是结果留浭i

如果有人知道我在哪里犯了错误,这会对我有很大帮助。

问候,

法比亚诺

最佳答案

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

此外,如果您在字符串中添加字符 N 前缀,例如 N'Yummi',它也应该有效,因为使用 N告诉 SQL Server 该字符串文字是 unicode。请参阅http://msdn.microsoft.com/en-us/library/ms179899.aspx

您可以在 SQL Server 中的字符串排序规则上陷入一个非常大的兔子洞。

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

关于当解密显示特殊字符时 SQL Server 2008 R2 加密问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25333348/

相关文章:

sql - Postgresql SELECT 表中的数据条目存在 ID

mysql - 检查两个数组中的相同索引 : IN (1, 2,3) AND IN (A, B, C)

mysql - 在没有条件的情况下,如何使查询不返回任何内容?

sql-server - SQL Server 2008 R2 中为开发人员提供的新增功能

ruby-on-rails - 升级到 Rails 7 时迁移加密的数据库字段

python - Vigenère Cipher 函数实现

sql - 如何优化 BINARY(N) 的 SQL 查询?

SQL根据条件对特定行求和?

python - pymysql:一次尝试,但无法捕获多sql错误

java - bouncycaSTLe 加密数据从 midlet 发送到 servlet