Page History
9.58 ENCRYPT
| Note |
|---|
テキスト文字列を暗号化します。
この組み込み関数と対で使用するこの組み込み関数と対で使用する 9.35 DECRYPT組み込み関数は、暗号化されたテキスト文字列を解読します。 組み込み関数は、暗号化されたテキスト文字列を解読します。
| Warning |
|---|
警告:LANSA V11 SP4 以降、暗号化にブランクのキーは使用されません。キー引数がすべてブランクで渡された場合、生成されたキーが代わりに使用されます。V11 SP4より古いバージョンでは、暗号化にすべてスペースのキーが使用されます。 |
LANSA for i | YES |
Visual LANSA for Windows | YES |
Visual LANSA for Linux | YES |
引数
番号 | タイプ | 必須/任意 | 記述 | 最小長 | 最大長 | 最小小数桁数 | 最大小数桁数 |
|---|---|---|---|---|---|---|---|
1 | u | 必須 | 暗号化するテキスト | 8 | 無制限 | ||
2 | N | 必須 | 暗号化するテキストの長さ この長さ引数の値は、8の倍数でなければなりません。 この引数には、第1引数(暗号化するテキスト)の長さより大きい値を指定することはできません。 | 1 | 11 | 0 | 0 |
3 | u | 任意 | 暗号化に使用するキー 暗号化用のキーを指定しない場合、キーが生成され戻されます。 暗号化に使用したキーは保存して、DECRYPT組み込み関数に指定する必要があります。 現在の暗号化は16バイト/128ビット・キーを使用します。最後の16バイトは今後の使用に備えて予約されています。 Unicodeフィールド・タイプが使用されると、UTF-8に変換され、32バイトに切り捨てられます。キーが指定されず、戻り値3がUnicodeフィールド・タイプの場合は、Unicodeキーが生成されます。このキーはUTF-8に変換され、32バイトに切り捨てられます。 もしくは、Unicodeフィールドを使用したキーを自動的に生成することも可能ですが、これには空の文字列が設定されます。 | 16 | 32 | ||
4 | A | 任意 | 16進数で保管された、暗号化されたテキスト YES = 16進数形式の暗号化されたテキストを戻す デフォルト値はNOです。 | 2 | 3 |
...
番号 | タイプ | 必須/任意 | 記述 | 最小長 | 最大長 | 最小小数桁数 | 最大小数桁数 |
|---|---|---|---|---|---|---|---|
1 | A | 必須 | 戻される暗号化されたテキスト | 8 | 無制限 | ||
2 | A | 任意 | 戻りコード OK = アクションが完了した | 2 | 2 | ||
3 | u | 任意 | キー引数の指定がない場合の暗号化に使用されたキー | 16 | 32 |
技術上の注記
- 暗号ブロック暗号化アルゴリズムでは、暗号化と復号化は必ず8桁のブロックで行われます。したがって、暗号化する時の実際の値は8の倍数の長さにする必要があります。暗号ブロック暗号化アルゴリズムでは、暗号化と復号化は必ず8桁のブロックで行われます。したがって、暗号化する時の実際の値は8の倍数の長さにする必要があります。
- 暗号化アルゴリズムにより暗号化され戻されたデータはバイナリー・データで、あらゆる値を含めることができます。このようにして暗号化されたデータを使用する場合や環境間で受け渡しする場合は、コード・ページ変換(例: データベース・マネージャー、コミュニケーション・リンクなど)が行われることがあります。またCRやLF、バイナリー・ゼロなどの特殊文字は各種問題(例:HTMLやXMLドキュメント、文字列処理、ストリーム・ファイルなど)の原因となる場合があり、問題が多いことがわかっています。したがって、暗号化されたデータは16進数のフォーマットで物理的に保管することをお勧めします。が行われることがあります。またCRやLF、バイナリー・ゼロなどの特殊文字は各種問題(例:HTMLやXMLドキュメント、文字列処理、ストリーム・ファイルなど)の原因となる場合があり、問題が多いことがわかっています。したがって、暗号化されたデータは16進数のフォーマットで物理的に保管することをお勧めします。
- Unicodeフィールドは暗号化される前にUTF-8に変換されます。これにより、Unicodeフィールドがあるプラフォームで暗号化され、別のプラットフォームで復号化できるようになります。またこれにより、暗号の長さ(引数2)を、暗号化されるテキスト(引数1)の長さの3倍にすることができます。また結果を16進数で保存する場合は、更に倍のサイズにできます。ですから、500文字のNVarcharがあったとすると、暗号化の長さは1500、戻された暗号化されたテキストは3000になります。ただし、実際にはこのような割合で長さを使用すると、データが失われてしまう恐れがあるので、注意してください。
...
********** =======================================================
********** Sample routine to Decrypt a passed in Hex value
********** using the supplied key and return the unencrypted
********** value.
********** =======================================================
SUBROUTINE DECRYPT ((#DKEY16 *Received)(#DHEX32 *Received) (#DVAL16 *Returned))
********** Key to be used for the decryption. This must be the
********** same key that was used for the encryption.
DEFINE #DKEY16 *char 16
DEFINE FIELD(#DHEX32) TYPE(*CHAR) LENGTH(32) DESC('Encrypted value in hex')
DEFINE FIELD(#DVAL16) TYPE(*CHAR) LENGTH(16) DESC('Decrypted value returned')
DEFINE FIELD(#DLEN) TYPE(*DEC) LENGTH(5) DECIMALS(0)
CHANGE FIELD(#DLEN) TO(16)
**********
**********
********** Use DECRYPT BIF to decrypt character #HEX32 of length
********** #DLEN using #DKEY16 to return decrypted value,#DVAL16
**********
USE BUILTIN(DECRYPT) WITH_ARGS(#HEX32 #DLEN #DKEY16 YES) TO_GET(#DVAL16)
ENDROUTINE
パスワードを暗号化(ENCRYPT)して、次に復号化(DECRYPT)します。
DEFINE FIELD(#PASSWORD) TYPE(*CHAR) LENGTH(10)
DEFINE FIELD(#TEXT) TYPE(*CHAR) LENGTH(16)
DEFINE FIELD(#LENGTH) TYPE(*DEC) LENGTH(11) DECIMALS(0)
DEFINE FIELD(#KEY) TYPE(*CHAR) LENGTH(16)
DEFINE FIELD(#RETCODE) TYPE(*CHAR) LENGTH(2)
DEFINE FIELD(#ENCRYPTED) TYPE(*CHAR) LENGTH(16)
DEFINE FIELD(#DECRYPTED) TYPE(*CHAR) LENGTH(16)
**********
********** Encrypt password with key
CHANGE #TEXT #PASSWORD
CHANGE #LENGTH 16
CHANGE #KEY 'AXG12345lj0gtUMX'
USE BUILTIN(ENCRYPT) WITH_ARGS(#TEXT #LENGTH #KEY) TO_GET(#ENCRYPTED #RETCODE)
**********
********** Decrypt password with same key as provided for encryption
CHANGE #LENGTH 16
USE BUILTIN(DECRYPT) WITH_ARGS(#ENCRYPTED #LENGTH #KEY) TO_GET(#DECRYPTED #RETCODE)
**********