[
|../../index.htm#lansa/encrypt.htm]
現在地:
注意: 9.1 組み込み関数の規則 利用オプション
テキスト文字列を暗号化します。
この組み込み関数と対で使用する9.35 DECRYPT組み込み関数は、暗号化されたテキスト文字列を解読します。
警告:LANSA V11 SP4 以降、暗号化にブランクのキーは使用されません。キー引数がすべてブランクで渡された場合、生成されたキーが代わりに使用されます。V11 SP4より古いバージョンでは、暗号化にすべてスペースのキーが使用されます。
引数
番号 |
タイプ |
必須/任意 |
記述 |
最小長 |
最大長 |
最小小数桁数 |
最大小数桁数 |
1 |
u |
必須 |
暗号化するテキスト |
8 |
無制限 |
|
|
2 |
N |
必須 |
暗号化するテキストの長さ |
1 |
11 |
0 |
0 |
3 |
u |
任意 |
暗号化に使用するキー |
16 |
32 |
|
|
4 |
A |
任意 |
16進数で保管された、暗号化されたテキスト |
2 |
3 |
|
|
戻り値
番号 |
タイプ |
必須/任意 |
記述 |
最小長 |
最大長 |
最小小数桁数 |
最大小数桁数 |
1 |
A |
必須 |
戻される暗号化されたテキスト |
8 |
無制限 |
|
|
2 |
A |
任意 |
戻りコード |
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) **********
[
|../../index.htm#lansa/encrypt.htm]