プロが教えるわが家の防犯対策術!

SQLServer2005を使っての暗号化について教えて下さい。

次のコードを実行し、暗号かされたレコードを複数行登録します。
(データベースを直接覗いてみるとうまく暗号化されて登録はされております)

OPEN SYMMETRIC KEY DES_KEY DECRYPTION BY PASSWORD = 'KeyPass';
INSERT INTO ANGOU_TEST
(
NAME_SEI,
NAME_MEI
)
VALUES
(
EncryptByKey(Key_GUID('DES_KEY'), '1'),
EncryptByKey(Key_GUID('DES_KEY'), '1')
)

その後SELECT文で複合をして表示すると、NULLとして表示される行がまれにあるのです。
(うまく行かない行とうまく行く行がまばらに出来てしまうのです...)

OPEN SYMMETRIC KEY DES_KEY DECRYPTION BY PASSWORD = 'KeyPass';

SELECT
CAST(DecryptByKey(NAME_SEI) AS VARCHAR(64)) AS NAME_SEI,
CAST(DecryptByKey(NAME_MEI) AS VARCHAR(64)) AS NAME_MEI
FROM
ANGOU_TEST

ちなみに、鍵は次のような方法で作りました。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'KeyPass'
CREATE SYMMETRIC KEY DES_KEY WITH ALGORITHM = DES
ENCRYPTION BY PASSWORD = 'KeyPass'

なぜこのような現象が起きてしまうのかご教授お願いします。

A 回答 (1件)

データの暗号化について上手くいって無いようですね。


EncryptByKeyおよびDecryptByKeyの関数仕様は熟読しましたか?
テーブル定義で暗号化対象のカラムの型はどのようになっていますか?
EncryptByKeyの戻り値の型がvarbinary 型である事を考慮して見直してみては如何でしょうか?

参考URL:http://msdn.microsoft.com/ja-jp/library/ms174361 …
    • good
    • 0
この回答へのお礼

テーブル定義varchar型でした、varbinary型(MAX)にする事で解決出来ました、ありがとうございました!

お礼日時:2008/10/04 13:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!