我知道您可以将binary data
转换为nvarchar
并保存在nvarchar
列中,然后在检索时将其转换回binary
。这是否会始终正确地为您提供原始的binary
数据?或者翻译中有什么东西搞砸了?
我问,因为我们有一个nvarchar
列,用纯文本保存密码。我希望将此更改为以加密文本保存PW。如果我使用函数EncryptByPassPhrase
,则返回varbinary
。我想知道我是否可以将输出从EncryptByPassPhrase
转换为nvarchar
并保存在相同的密码列中。这比创建varbinary
类型的新列以保存加密的PW更容易。
所以我建议我转换当前的密码:
UPDATE Users
SET Password = CONVERT(nvarchar(200), EncryptByPassPhrase('whatever', Password))
然后我会解密并检索PW,如:
SELECT CONVERT(nvarchar(200), DecryptByPassPhrase('whatever', Password)) AS PW
FROM Users
这总能正常运作吗?
提前致谢!
答案 0 :(得分:0)
忽略这是否是一个好主意,以下查询似乎表明所有两个字节组合都正确地往返。
WITH T1 AS
(
SELECT
TOP 65536 CAST(ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 32769 AS SMALLINT) RN
FROM master..spt_values v1, master..spt_values v2
), T2 AS
(
SELECT CAST(CAST(RN AS BINARY(2)) AS NCHAR(1)) AS NC,
RN
FROM T1
)
SELECT *
FROM T2
WHERE CAST(CAST(NC AS BINARY(2)) AS SMALLINT) <> RN