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