9.58 ENCRYPT

注意: 9.1 組み込み関数の規則     &<a href="ladtgub1_0056.htm"&>利用オプション&</a&>
テキスト文字列を暗号化します。
この組み込み関数と対で使用する9.35 DECRYPT組み込み関数は、暗号化されたテキスト文字列を解読します。
警告:LANSA V11 SP4 以降、暗号化にブランクのキーは使用されません。キー引数がすべてブランクで渡された場合、生成されたキーが代わりに使用されます。V11 SP4より古いバージョンでは、暗号化にすべてスペースのキーが使用されます。
引数

番号

タイプ

必須/任意

記述 

最小長

最大長

最小小数桁数

最大小数桁数

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 = バイナリー形式の暗号化されたテキストを戻す
デフォルト値はNOです。

2

3

 

 

戻り値

番号

タイプ

必須/任意

記述

最小長

最大長

最小小数桁数

最大小数桁数

1

A

必須

戻される暗号化されたテキスト

8

無制限

 

 

2

A

任意

戻りコード
OK = アクションが完了した
ER = エラーが発生した

2

2

 

 

3

u

任意

キー引数の指定がない場合の暗号化に使用されたキー

16

32

 

 

技術上の注記


次の2つのRSMLサブルーチンは、汎用的な暗号化技術を使って、最大16文字長のあらゆる情報を暗号化します。  
例えば、EXECUTE ENCRYPT (#KEY #PROD_NUM #PROD_ENC)では、#PROD_NUM(10文字)を暗号化して、#PROD_ENC(32文字)を生成します。
サブルーチンのパラメータの#PROD_NUMは10文字のフィールドですが、結果のフィールドである#PROD_ENCは32文字であることに注意してください。
これは初期バイナリー暗号化では8の倍数の入力が必要だからです(例:サブルーチン実行により10文字の#PROD_NUMは16バイトの長さになるようにブランクが埋め込まれます)。暗号化されたバイナリー・データは16進数で出力されます。したがって長さは32バイトになります。 
後で実行する復号化処理を正常に完了させるため、#PROD_ENCの32バイトすべてを保管する必要があります。
この値を復号化するコードは、EXECUTE DECRYPT (#KEY #PROD_ENC #PROD_NUM)です。
この処理では、32バイトの16進数値はまずバイナリーに変換され復号化された後、16文字で戻されます。
最終的に、このサブルーチンは復号化された値の右側を切り捨てて10文字にして#PROD_NUMに値を入れます。
指定のキーを用いて値を暗号化(ENCRYPT)し、暗号化された値を32バイトの16進数で戻します。
********** =======================================================  ********** Sample routine to Encrypt a passed in value (up to 16    ********** bytes in length) with a supplied key and return a        ********** 32 byte encrypted value in hex (suitable for storing in  ********** database, etc)                                          ********** =======================================================  SUBROUTINE NAME(ENCRYPT) PARMS((#KEY16 *RECEIVED) (#VAL16 *RECEIVED) (#HEX32 *RETURNED)) DEFINE     FIELD(#KEY16) TYPE(*CHAR) LENGTH(16) DESC('Encryption key supplied') DEFINE     FIELD(#VAL16) TYPE(*CHAR) LENGTH(16) DESC('Value to be encrypted') DEFINE     FIELD(#HEX32) TYPE(*CHAR) LENGTH(32) DESC('Encrypted value in Hex') DEFINE     FIELD(#LEN) TYPE(*DEC) LENGTH(5) DECIMALS(0)            CHANGE     #LEN 16                                                 ********** Use ENCRYPT BIF to encrypt #VAL16 of length #LEN using  ********** #KEY16 to return encrypted value in #HEX32              ********** The encrypted value is converted into HEX resulting in  ********** a 32 byte value. USE        BUILTIN(ENCRYPT) WITH_ARGS(#VAL16 #LEN #KEY16 YES) TO_GET(#HEX32) ENDROUTINE                                                         ********** =======================================================  
指定のキーを用いて16進数値を復号化(DECRYPT)して、暗号化されていない値に戻します。
********** =======================================================  ********** 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) **********