4

我知道您可以转换binary datanvarchar并保存在列中,然后在检索时nvarchar将其转换回。binary这会一直正确地为您提供原始binary数据吗?或者翻译中可能会出现问题?

我问是因为我们有一nvarchar列以纯文本形式保存密码。我希望将其更改为将 PW 保存在加密文本中。如果我使用该函数EncryptByPassPhrase,它会返回varbinary。我想知道我是否可以将输出从转换EncryptByPassPhrasenvarchar并保存在同一个密码列中。这比创建一个新的类型列varbinary来保存加密的 PW 更容易。

所以我建议我像这样转换当前密码:

UPDATE Users 
SET Password = CONVERT(nvarchar(200), EncryptByPassPhrase('whatever', Password))

然后我将解密并检索 PW,如:

SELECT CONVERT(nvarchar(200), DecryptByPassPhrase('whatever', Password)) AS PW 
FROM Users

这会一直正常工作吗?

提前致谢!

4

1 回答 1

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
于 2012-11-07T10:22:15.697 回答