SQL Server截断加密值

时间:2016-05-19 16:58:14

标签: sql-server

我遇到SQL Server截断加密值的问题。这似乎很奇怪,因为它加密的字符串的长度根本不长。

如果我在查询窗口中执行以下SQL:

OPEN SYMMETRIC KEY MySymmetricKey DECRYPTION BY CERTIFICATE MyCertificate; 

SELECT 
CONVERT(nvarchar, DecryptByKey(
ENCRYPTBYKEY(KEY_GUID('MySymmetricKey'), convert(varbinary(8000), cast('hellothisisastringwhichisntverylong' AS nvarchar(max))))
))

输出结果为:" hellothisisastringwhichisntver"

我已经查看了很多例子,但是我无法看到我做错了什么?

我还应该指出,我尝试过不使用nvarchar(max)和varbinary(8000)的变体,但他们不会改变结果。

干杯!

1 个答案:

答案 0 :(得分:3)

您的CONVERT语句未指定要使用的NVARCHAR长度,因此它使用默认的NVARCHAR(30)

https://technet.microsoft.com/en-us/library/ms187928(v=sql.100).aspx

尝试这个(或者你想要的任何其他长度):

OPEN SYMMETRIC KEY MySymmetricKey DECRYPTION BY CERTIFICATE MyCertificate; 

SELECT 
CONVERT(nvarchar(100), DecryptByKey(
ENCRYPTBYKEY(KEY_GUID('MySymmetricKey'), convert(varbinary(8000), cast('hellothisisastringwhichisntverylong' AS nvarchar(max))))
))