2011-09-14 8 views
2

暗号化が初めてです。フィールドをテーブル(DocNumber)に暗号化しておく必要があります。私は設定することで、暗号化されたvarbinaryの場としてこれを保つ:暗号化されたパスフレーズで保存された行を取得する

docNumber = ENCRYPTBYPASSPHRASE('password', @docnumber) 

私は以下の私はないdocnumber使用してテーブルを照会する場合:それは適格なレコードを返すことに失敗しかし

WHERE docNumber = DECRYPTBYPASSPHRASE('password', @docNumber) 

。私はENCRYPTBYPASSPHRASE()を同じパスワードと値で繰り返し呼び出すと、暗号化された値が違うことに気付きました。 ここで私は間違いをしていますか?あなたはどのようにこれにいつも取り組んでいますか?私はこの方法がそれを常に使用していた

答えて

2

、述語を整理するだけで、わずかに異なる方法:

WHERE CONVERT(VARCHAR(64), DECRYPTBYPASSPHRASE('password', docNumber)) = @docNumber; 

違いは、保存時の暗号が含まれ、元の値、上で復号化を実行していることですあなたが試していたバージョンでは、もう一度解読していて、これは別の暗号を生成します。

EDITHASHBYTES()を使用して、サンプルを追加:

USE tempdb; 
GO 
CREATE TABLE dbo.enctest(x VARBINARY(64)); 
GO 
INSERT dbo.enctest(x) SELECT HASHBYTES('SHA1', 'foo'); 
INSERT dbo.enctest(x) SELECT HASHBYTES('SHA1', 'bar'); 
GO 
SELECT x FROM dbo.enctest WHERE x = HASHBYTES('SHA1', 'foo'); 
GO 
DROP TABLE dbo.enctest; 
GO 
+0

を私はこれを試すことができます知っているが、このアプローチでは、データベースのインデックスが使用され、非常にされていない – josephj1989

+0

非効率的にその後多分あなたはvarbinary型の列を考慮し、HASHBYTESを使用しなければなりません()を適切なアルゴリズム(SHA1、MD5など)で置き換えます。 HASHBYTESでは、毎回同じハッシュ値が得られます。 –

関連する問題