ENCRYPT_RC2
ENCRYPT_RC2 関数は、RC2 暗号化アルゴリズムを使用して データ・ストリング を暗号化した結果の値を戻します。 暗号化解除に使用されるパスワードは、パスワード・ストリング 値か、 暗号化パスワードの値 (SET ENCRYPTION PASSWORD ステートメントで割り当てられる) です。
>>-ENCRYPT_RC2--(--data-string--+----------------------------------------+--)->< '-,--password-string--+----------------+-' '-,--hint-string-'
- data-string
- 暗号化するストリング値を戻す式。
ストリング式は、組み込みストリング・データ・タイプでなければなりません。
データ・ストリング のデータ・タイプの長さ属性は、 m - MOD(m,8) - n - 1 より小さくなければなりません。 ここで、m は結果データ・タイプの最大長で、n は、値を暗号化するのに必要なオーバーヘッドの量です。
- ヒント・ストリング が指定されない場合、n は 8 バイトです。
- ヒント・ストリング が指定される場合、n は 40 バイトです。
- password-string
- 6 バイト以上 127 バイト以下の文字ストリング値を戻す式。 この式は CLOB であってはなりません。 この値は、データ・ストリングを暗号化するために使用したパスワードを表します。 パスワード引数の値が NULL であるか、値を指定しない場合は、 データは ENCRYPTION PASSWORD 値を使用して暗号化されます。 この値は、SET ENCRYPTION PASSWORD ステートメントを使用して設定しておく必要があります。
- hint-string
- データ所有者がパスワードを思い出すのに役立つ最大 32 バイトの文字ストリング値を戻す式 (例えば、 「Ocean」は「Pacific」を思い出すためのヒント)。 この式は CLOB であってはなりません。 ヒント値を指定すると、ヒントは結果に埋め込まれ、GETHINT 関数を使用して検索できます。 パスワード・ストリング が指定されており、この引数が NULL 値であるか提供されない場合は、ヒントは結果に埋め込まれません。 パスワード・ストリング が指定されていない場合は、SET ENCRYPTION PASSWORD ステートメントを使用してヒントを指定できます。
結果のデータ・タイプは、以下の表に示すとおり、最初の引数によって決まります。
最初の引数のデータ・タイプ | 結果のデータ・タイプ |
---|---|
BINARY または VARBINARY | VARBINARY |
CHAR、VARCHAR、GRAPHIC、または VARGRAPHIC | VARCHAR FOR BIT DATA |
BLOB、CLOB、または DBCLOB | BLOB |
結果の長さ属性は、指定される引数によって次のように異なります。
- data-string の実際の長さに、次の 8 バイト境界までのバイト数を足したもの。1
- ヒントの実際の長さ。
ヒント・ストリング が関数の引数として、または SET ENCRYPTION PASSWORD ステートメントに指定されていない場合、ヒントの実際の長さはゼロです。
- n - ここで n (値を暗号化するのに必要なオーバーヘッドの量) は 8 バイト (data-string が LOB である場合、または data-string、パスワード、またはヒントに別の CCSID 値を使用する場合は、16 バイト) です。
引数が NULL になる可能性がある場合は、結果も NULL になる可能性があります。 引数が NULL の場合は、結果は NULL 値になります。
暗号化された結果は、データ・ストリング 値より長くなることに注意してください。 したがって、暗号化された値を割り当てる場合は、 暗号化された値の全体を入れるのに十分なサイズでターゲットを宣言するようにしてください。
注
パスワード保護: 暗号化パスワードへの不用意なアクセスを避けるため、 プログラム、プロシージャー、または関数のソースに パスワード・ストリング をストリング定数として指定しないでください。 代わりに、SET ENCRYPTION PASSWORD ステートメントまたはホスト変数を使用してください。
リモート・リレーショナル・データベースに接続しているとき、 指定されたパスワード自体は「平文で」送信されます。 つまり、パスワード自体は暗号化されません。 このようなケースでパスワードを保護するには、 IPSEC (または IBM® i 製品同士の接続の場合は SSL) などの通信暗号化メカニズムを使用することを考慮してください。
暗号化アルゴリズム: 使用される内部暗号化アルゴリズムは、 埋め込み処理を行う RC2 ブロック暗号で、128 ビットの秘密鍵は、 MD5 メッセージ要約を使用してパスワードから引き出されます。
暗号化パスワードおよびデータ: パスワードは、ユーザーが責任を持って管理します。 データを暗号化すると、データを暗号化解除するのに使用できるのは暗号化に使用したパスワードだけです。 CHAR 変数を使用してパスワード値を設定する場合は、 パスワード値にブランクが埋め込まれることがあるので注意してください。 暗号化された結果には、NULL 終止符や他の印刷できない文字が含まれる場合があります。
表列の定義: 列および特殊タイプに暗号化されたデータが入るように定義する場合:
- CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY、 VARBINARY、 または BLOB のデータ・タイプを使用して列を定義する必要があります。
- 列の長さ属性に追加の n バイトが含まれている必要があります。 n は、前述のとおり、データを暗号化するのに必要なオーバーヘッドです。
これらのデータ・タイプの 1 つがない列、または提案されたデータ長より短い長さの列に割り当てまたはキャストを行うと、割り当てエラーになる場合があります。 あるいは、割り当てが成功すると、その後データを暗号化解除するときに失敗してデータが失われます。 ブランクは暗号化されたデータとして有効ですが、短い列に保管される場合は切り捨てられます。
列の長さの計算例を以下に示します。
暗号化されていないデータの最大長 6 バイト
次の 8 バイト境界までのバイト数 2 バイト
オーバーヘッド 8 バイト (または 16 バイト)
--------
暗号化されたデータの列の長さ 16 バイト (または 32 バイト)
暗号化されていないデータの最大長 32 バイト
次の 8 バイト境界までのバイト数 8 バイト
オーバーヘッド 8 バイト (または 16 バイト)
--------
暗号化されたデータの列の長さ 48 バイト (または 56 バイト)
暗号化されたデータの管理: 暗号化されたデータは、 ENCRYPT_RC2 関数に対応する暗号化解除関数をサポートするサーバーでのみ暗号化解除できます。 したがって、暗号化されたデータを含む列のレプリケーションは、 暗号化解除関数をサポートするサーバーに対してのみ行う必要があります。
代替構文: 旧バージョンの DB2® との互換性を確保するために、 ENCRYPT_RC2 の代わりに ENCRYPT を指定することもできます。
例
- 表 EMP1 に SSN という社会保障の列があると想定します。
この例では、暗号化パスワードを保持するために ENCRYPTION PASSWORD 値を使用します。
SET ENCRYPTION PASSWORD = 'Ben123' INSERT INTO EMP1 (SSN) VALUES ENCRYPT_RC2( '289-46-8832' )
- この例は、暗号化パスワードを明示的に受け渡しします。
INSERT INTO EMP1 (SSN) VALUES ENCRYPT_RC2( '289-46-8832', 'Ben123' )
- ヒント「Ocean」は、ユーザーが暗号化パスワード「Pacific」を思い出せるようにするために保管されます。
INSERT INTO EMP1 (SSN) VALUES ENCRYPT_RC2( '289-46-8832', 'Pacific', 'Ocean' )