注意: 9.1 組み込み関数の規則 利用オプション
テキスト文字列を暗号化します。
この組み込み関数と対で使用する9.35 DECRYPT組み込み関数は、暗号化されたテキスト文字列を解読します。
警告:LANSA V11 SP4 以降、暗号化にブランクのキーは使用されません。キー引数がすべてブランクで渡された場合、生成されたキーが代わりに使用されます。V11 SP4より古いバージョンでは、暗号化にすべてスペースのキーが使用されます。
引数
|
戻り値
|
技術上の注記
例
次の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)
**********