4

列に変換binary datanvarcharて保存し、それを取得するときに元に戻すことができることを私は知っています。これは常に正しく機能して、元のデータを提供しますか?または、翻訳で何かが台無しになる可能性がありますか?nvarcharbinarybinary

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

これは常に正しく機能しますか?

前もって感謝します!

4

1 に答える 1

0

これが良い考えであるかどうかを無視すると、次のクエリは、2 バイトの組み合わせがすべて正しく往復することを示しているようです。

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 に答える