我遇到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)的变体,但他们不会改变结果。
干杯!
答案 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))))
))