4

証明書と対称鍵を使用してデータベース列を暗号化しようとしています。

以下を使用して、証明書と対称鍵を正常に作成しました。

CREATE CERTIFICATE MyCertificate
    ENCRYPTION BY PASSWORD = 'password'
    WITH SUBJECT = 'Public Access Data'
GO

CREATE SYMMETRIC KEY MySSNKey
    WITH ALGORITHM = AES_256
    ENCRYPTION BY CERTIFICATE MyCertificate

以下を使用して、いくつかのデータを暗号化および復号化してみました。

DECLARE @Text VARCHAR(100)
SET @Text = 'Some Text'

DECLARE @EncryptedText VARBINARY(128)

-- Open the symmetric key with which to encrypt the data.
OPEN SYMMETRIC KEY MySSNKey
   DECRYPTION BY CERTIFICATE MyCertificate;

SELECT @EncryptedText = EncryptByKey(Key_GUID('MySSNKey'), @Text)

SELECT CONVERT(VARCHAR(100), DecryptByKey(@EncryptedText)) AS DecryptedText

これを行うと、次のエラーメッセージが表示されます。

証明書には、ユーザー定義のパスワードで保護された秘密鍵があります。秘密鍵を使用できるようにするには、そのパスワードを指定する必要があります。

最終的に、私がやろうとしているのは、暗号化されていないデータを入力として受け取り、暗号化してから、暗号化された変数として格納するストアドプロシージャを作成することです。次に、反対の処理を行う2番目のストアドプロシージャを作成します。つまり、暗号化された変数を復号化して、人間が読める形式のデータ型に変換し直します。ストアドプロシージャで直接パスワードを指定する必要はありません。それを行う方法はありますか?上記のコードで何が間違っていますか?

ありがとう。

4

2 に答える 2

5

あなたはただ使う必要があります:

OPEN SYMMETRIC KEY MySSNKey
   DECRYPTION BY CERTIFICATE MyCertificate WITH PASSWORD = 'password';
于 2012-09-09T03:41:11.720 に答える
0

マスターキーを使用する必要があります

例:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MasterPassword';
CREATE CERTIFICATE MyCertificate WITH SUBJECT = 'Public Access Data';
CREATE SYMMETRIC KEY MySSNKey   WITH ALGORITHM = AES_256   ENCRYPTION BY CERTIFICATE MyCertificate;


OPEN SYMMETRIC KEY MySSNKey DECRYPTION BY CERTIFICATE MyCertificate;
SELECT Customer_id, Credit_card_number_encrypt AS 'Encrypted Credit Card Number',
CONVERT(varchar, DecryptByKey(Credit_card_number_encrypt)) AS 'Decrypted Credit Card Number'
FROM dbo.Customer_data;
CLOSE SYMMETRIC KEY MySSNKey ;
于 2016-04-13T09:17:29.160 に答える