SQL Server 截断加密值

dav*_*ley 2 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))))
))
Run Code Online (Sandbox Code Playgroud)

输出是:“hellothisisastringwhichisntver”

我看过很多例子,但是我看不出我做错了什么?

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

干杯!

squ*_*man 5

您的 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))))
))
Run Code Online (Sandbox Code Playgroud)