Page History
9.58 ENCRYPT
| Note |
|---|
テキスト文字列を暗号化します。
この組み込み関数と対で使用するこの組み込み関数と対で使用する 9.35 DECRYPT組み込み関数は、暗号化されたテキスト文字列を解読します。 組み込み関数は、暗号化されたテキスト文字列を解読します。
| Warning |
|---|
警告:LANSA V11 SP4 以降、暗号化にブランクのキーは使用されません。キー引数がすべてブランクで渡された場合、生成されたキーが代わりに使用されます。V11 SP4より古いバージョンでは、暗号化にすべてスペースのキーが使用されます。 |
...
- 暗号ブロック暗号化アルゴリズムでは、暗号化と復号化は必ず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)
**********