Encrypt

説明

特定のアルゴリズムおよびエンコード方法を使用して、文字列を暗号化します。

戻り値

文字列。元の文字列よりも長くなる場合があります。

カテゴリ

セキュリティ関数文字列関数

関数のシンタックス

Encrypt(string, key, encoding, algorithm, IV_Salt, iterations)

関連項目

DecryptEncryptBinaryDecryptBinary

履歴

  • ColdFusion(2023 リリース)アップデート 8 および ColdFusion(2021 リリース)アップデート 14:デフォルトのアルゴリズムが CFMX_COMPAT から AES/CBC/PKCS5Padding に変更されました。
  • ColdFusion(2021 リリース):認証暗号化のサポートが追加されました。
  • ColdFusion(2018 リリース):名前付きパラメーターが導入されました。
  • ColdFusion 8:エンタープライズ版で RSA BSafe Crypto-J ライブラリを使用した暗号化がサポートされるようになりました。
  • ColdFusion MX 7.01:IVorSalt パラメーターと iterations パラメーターが追加されました。
  • ColdFusion MX 7:algorithm パラメーターと encoding パラメーターが追加されました。

パラメーター

パラメーター

説明

string

暗号化する文字列です。

key

文字列。文字列を暗号化するために使用するキーまたはシードです。

  • CFMX_COMPAT アルゴリズムの場合、任意の数の文字を任意に組み合わせて、32 ビットの暗号化キーを生成するためのシードとして使用します。

  • その他のアルゴリズムの場合は、そのアルゴリズムで使用する形式のキーです。これらのアルゴリズムでは、GenerateSecretKey 関数を使用してキーを生成します。

algorithm

(オプション)文字列を暗号化するために使用するアルゴリズムです。

エンタープライズ版の ColdFusion では、RSA BSafe Crypto-J ライブラリがインストールされます。このライブラリを使用すると、FIPS-140 に準拠した強力な暗号化を利用できます。このライブラリでは、次のアルゴリズムを使用できます。

  • AES:NIST(National Institute of Standards and Technology:米国標準技術局)FIPS-19 で定義された Advanced Encryption Standard です。
  • DES:NIST FIPS-46-3 で定義された Data Encryption Standard アルゴリズムです。
  • DES-EDE:NIST FIPS-46-3 で定義された Triple DES アルゴリズムです。
  • DESX:DES 対称暗号化アルゴリズムの拡張版です。
  • RC2:RFC 2268 で定義された RC2 ブロック対称暗号化アルゴリズムです。
  • RC4:RC4 対称暗号化アルゴリズムです。
  • RC5:RC5 暗号化アルゴリズムです。
  • PBE:PKCS #5 で定義されたパスワードベースの暗号化アルゴリズムです。
  • AES/GCM/NoPadding:暗号化アルゴリズムです。
  • AES/CBC/PKCS5Padding:暗号化アルゴリズムです。

これらのアルゴリズムに加えて、標準版の ColdFusion に用意されているアルゴリズムも使用できます。

標準版の ColdFusion では、次のアルゴリズムを使用する暗号ライブラリがインストールされます。

  • CFMX_COMPAT: ColdFusion MX およびそれ以前のリリースで使用されるアルゴリズムです。このアルゴリズムは、最も安全性が低いオプションです(デフォルト)。
  • AES:NIST(National Institute of Standards and Technology:米国標準技術局)FIPS-197 で定義された Advanced Encryption Standard です。
  • BLOWFISH:Bruce Schneier 氏が定義した Blowfish アルゴリズムです。
  • DES:NIST FIPS-46-3 で定義された Data Encryption Standard アルゴリズムです。
  • DESEDE:NIST FIPS-46-3 で定義された Triple DES アルゴリズムです。

これら以外の暗号アルゴリズムを使用するセキュリティプロバイダーをインストールした場合は、その暗号化/復号アルゴリズムを指定することもできます。

encoding

(オプション)このパラメーターを指定する場合は、algorithm パラメーターも指定します。これは、データを文字列として表すために使用するバイナリエンコードです。

  • Base64:IETF RFC 2045 で定義された Base64 アルゴリズムです。

  • Hex:バイト値を 16 進数で表す、A~F および 0~9 の文字です。

  • UU:UUEncode アルゴリズムです(デフォルト)。

IV_Salt

(オプション)このパラメーターは、他の暗号化ソフトウェアの動作と一致するように ColdFusion の暗号化動作を調整する場合に使用します。このパラメーターを指定する場合は、algorithm パラメーターも指定します。

  • ブロック暗号化アルゴリズムの場合:アルゴリズムで使用するバイナリ初期化ベクター値です。このアルゴリズムには、ECB 以外のフィードバックモードが含まれている必要があります。これは、アルゴリズムのブロックサイズとまったく同じサイズのバイナリ値である必要があります。データを正しく復号するには、Decrypt 関数で同じ値を使用します。

  • パスワードベースの暗号化アルゴリズムの場合:パスワードをキーに変換するためのバイナリのソルト値です。データを復号するときには同じ値を使用する必要する必要があります。

iterations

(オプション)パスワードをバイナリキーに変換するための繰り返し回数です。このパラメーターは、他の暗号化ソフトウェアの動作と一致するように ColdFusion の暗号化動作を調整する場合に使用します。このパラメーターを指定する場合は、同時に algorithm パラメーターで PBE(Password Based Encryption:パスワードベースの暗号化)アルゴリズムを指定します。ブロック暗号化アルゴリズムの場合は、このパラメーターを指定しないでください。データの暗号化と復号には同じ値を使用します。

使用方法

この関数では、文字列の暗号化と復号に同じキーを使用する、シンメトリカルなキーベースのアルゴリズムが使用されます。暗号化された文字列のセキュリティは、キーの機密性によって異なります。

ColdFusion で使用される、RSA BSafe Crypto-J ライブラリに含まれる FIPS-140 認定アルゴリズムには次のものがあります。一部のアルゴリズムは Encrypt 関数では使用されませんが、他の関数で使用されます。

  • AES - ECB、CBC、CFB(128)、OFB(128) - [128、192、256 ビットのキーサイズ]

  • AES - CTR

  • Diffie-Hellman Key Agreement

  • DSA

  • FIPS 186-2 General Purpose [(x-Change Notice); (SHA-1)]

  • FIPS 186-2 [(x-Change Notice)、(SHA-1)]

  • HMAC-SHAx(x は 1、224、256、384、または 512)

  • RSA PKCS#1 v1.5(署名、検証)(SHA-1、SHA-224、SHA-256、SHA-384、SHA-512)

  • Secure Hash Standard(SHA-1、SHA-224、SHA-256、SHA-384、SHA-512)

  • Triple DES - ECB、CBC、CFB(64 ビット)、および OFB(64 ビット)

RSA BSafe Crypto-J ライブラリに含まれるアルゴリズムは、エンタープライズ版で使用できます。一部のアルゴリズムを無効したいという場合もあります。DESX、RC5、および MD5PRNG アルゴリズムを無効にするには、ColdFusion Administrator の「Java と JVM」ページで次のように JVM 引数を指定します。

-Dcoldfusion.enablefipscrypto=true

 

JBoss の WebSphere で ColdFusion を実行している場合は、FIPS-140 認定の暗号化方式を使用できません。

エンタープライズ版で IBM Lotus Sametime の Instant Messaging Gateway を使用する場合は、ColdFusion Administrator の「Java と JVM の設定」ページで次のように JVM 引数を指定して、FIPS-140 認定アルゴリズム以外の暗号化方式も使用できるようにします。

-Dcoldfusion.disablejsafe=true

 

標準版では、デフォルトのアルゴリズム以外のすべてのアルゴリズムに対して JCE(Java Cryptography Extension)が使用され、Sun JCE のデフォルトセキュリティプロバイダーを含む Sun Java ランタイムがインストールされます。このプロバイダーには、「パラメーター」節で示したアルゴリズムが含まれています。JCE フレームワークには、他のプロバイダーの実装を使用するための機能も含まれています。ただし、アドビでは、サードパーティのセキュリティプロバイダーに対するテクニカルサポートは提供していません。

デフォルトのアルゴリズムは、ColdFusion 5 および ColdFusion MX で使用されていたものと同じです。ユーザーが関数のパラメーターとして渡すシードに基づいた擬似 32 ビットキーを使用する、XOR ベースのアルゴリズムが使用されます。このアルゴリズムは、使用可能な他のアルゴリズムに比べて安全性が劣ります。

次の例では、テキスト文字列を暗号化および復号します。暗号化アルゴリズムとエンコード方式を指定する必要があります。CFMX_COMPAT アルゴリズムで使用するキーシード用のフィールドもあります。CFMX_COMPAT 以外のすべてのアルゴリズムでは、シークレットキーが生成されます。

<h3>Encrypt の例</h3>
<! --- フォームが送信された場合は、以下を実行します。--->
<cfif IsDefined("Form.myString")>
<cfscript>
/* GenerateSecretKey が CFMX_COMPAT アルゴリズムのキーを生成しないので、
フォームのキーを使用します。
*/
if (Form.myAlgorithm EQ "CFMX_COMPAT")
theKey=Form.MyKey;
// その他の暗号化手法の場合は、シークレットキーを生成します。
else
theKey=generateSecretKey(Form.myAlgorithm);
// 文字列を暗号化します
encrypted=encrypt(Form.myString, theKey, Form.myAlgorithm,
Form.myEncoding);
// 暗号化した文字列を復号します
decrypted=decrypt(encrypted, theKey, Form.myAlgorithm, Form.myEncoding);
</cfscript>

<! --- 暗号化と復号に使用した値とその結果を
表示します。 --->
<cfoutput>
<b>The algorithm:</b> #Form.myAlgorithm#<br>
<b>The key:</B> #theKey#<br>
<br>
<b>The string:</b> #Form.myString# <br>
<br>
<b>Encrypted:</b> #encrypted#<br>
<br>
<b>Decrypted:</b> #decrypted#<br>
</cfoutput>
</cfif>

<!--- 入力フォーム --->
<form action="#CGI.SCRIPT_NAME#" method="post">
<b>Select the encoding</b><br>
<select size="1" name="myEncoding">
<option selected>UU</option>
<option>Base64</option>
<option>Hex</option>
</select><br>
<br>
<b>Select the algorithm</b><br>
<select size="1" name="myAlgorithm">
<option selected>CFMX_COMPAT</option>
<option>AES</option>
<option>DES</option>
<option>DESEDE</option>
</select><br>
<br>
<b>Input your key</b> (used for CFMX_COMPAT encryption only)<br>
<input type = "Text" name = "myKey" value = "MyKey"><br>
<br>
<b>Enter string to encrypt</b><br>
<textArea name = "myString" cols = "40" rows = "5" WRAP = "VIRTUAL">This string will be encrypted (you can replace it with more typing).
</textArea><br>
<input type = "Submit" value = "Encrypt my String">
</form>

 

<cfscript>
    myMessage = &quot;Message to encrypt&quot;
    key = generateSecretKey('AES');
    encryptedMsg = encrypt(myMessage,key,'AES', 'Base64');
    writeOutput(encryptedMsg);
</cfscript>

出力

JbRh2Ez58OJc9wpZUDefz0GZyDnA0/IMuV9qaRcFzCY=

例 2

<cfscript>  
    // 文字列データ  
    a = &quot;abcd&quot;  
    // キーを生成します  
    key = GenerateSecretKey(&quot;AES&quot;)  
    iterations=&quot;AssoicatedData&quot;  
    randomIntegers = [];  
    // SALT 値を生成します  
    for ( i = 1 ; i <= 12 ; i++ ) {  
        arrayAppend( randomIntegers, randRange( -128, 127, &quot;SHA1PRNG&quot; ) );  
    }  
    initializationVector = javaCast( &quot;byte[]&quot;, randomIntegers )  
    enc1 = Encrypt(string=a,   
                   key=key,   
                   encoding=&quot;UU&quot;,   
                   algorithm=&quot;AES/GCM/NoPadding&quot;,  
                   IV_Salt=initializationVector,   
                   iterations=iterations)  
    writeDump(enc1)  
</cfscript> 

出力

4Z1! >"1'E8=$3Y%'"KJ! /T-3S?[X 

ヘルプをすばやく簡単に入手

新規ユーザーの場合

Adobe MAX 2025

Adobe MAX Japan
クリエイターの祭典

2025 年 2 月 13 日
東京ビッグサイト