首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2008 R2加密问题,解密时显示特殊字符

Server 2008 R2加密问题,解密时显示特殊字符
EN

Stack Overflow用户
提问于 2014-08-15 20:00:17
回答 1查看 2.2K关注 0票数 4

我是SQL Server加密的新手,我需要对数据库中的一些列进行加密。我成功地创建了主密钥、证书、对称密钥并加密了我的列,但当我解密它时,它显示了一些类似中文的字符,有类似的经历吗?

这是我的密码。

代码语言:javascript
复制
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

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

致以敬意,

法比亚诺

EN

回答 1

Stack Overflow用户

发布于 2014-08-15 20:16:15

您正在将加密的值转换为nvarchar,但是当您使用insert语句时,可以指定一个普通的varchar。如果将结果转换为varchar,它应该会像预期的那样工作。

另外,如果您用字符N作为字符串的前缀,就像N'Yummi'一样,它也应该可以工作,因为使用N会告诉N这个字符串文字是unicode。请参阅http://msdn.microsoft.com/en-us/library/ms179899.aspx

在SQL server中,您可以在字符串排序规则上找到一个非常大的兔子洞。

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25333348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档