共通鍵暗号方式

Curlで共通鍵暗号方式を利用して、暗号化・復号化を実現するには、EncryptStream(暗号)、DecryptStream(複合)クラスを利用します。(これらを利用する際は、CURL.CRYPTO.CIPHERパッケージをインポートしてください。) Curlでは共通鍵暗号方式のアルゴリズムとして、トリプルDES, rc2, rc4、AES AES-128、AES-192、AES-256 AESはVer.8より提供開始 }をサポートしています。詳細はAPIドキュメントのAlgorithmクラスを参照ください。このアルゴリズムを共通鍵のSessionKeyクラスに指定し、EncryptStreamを利用して暗号化します。詳細は以下のサンプルを御覧下さい。

{import * from CURL.CRYPTO.CIPHER}

{define-proc public inline {encrypt
                                         algorithm:Algorithm = Algorithm.des3,
                                         common-key:{Array-of byte}, 
                                         message:{Array-of byte},
                                         out:ByteOutputStream
                                    }:void
    {with-open-streams enc-out =
        {TranscodingTextOutputStream
            {EncryptStream
                out,
                {SessionKey.from-bytes algorithm, common-key}
            },
            CharEncoding.utf8,
            false
        }
     do
        {for i:int = 0 below message.size do
            {enc-out.write-one message[i] asa byte}
        }
    }
}

{define-proc public inline {decrypt
                                         algorithm:Algorithm = Algorithm.des3,
                                         common-key:{Array-of byte}, 
                                         in:ByteInputStream
                                    }:String
    def buf = {StringBuf}
    {with-open-streams dec-in =
        {TranscodingTextInputStream
            {DecryptStream
                in,
                {SessionKey.from-bytes algorithm, common-key}
            }
        }
     do
        {for b in {dec-in.read} do
            {buf.append b asa char}
        }
        {return {buf.to-String}}
    }
}

{do
    def secret-file = “secret-file”
    def key = {{Array-of byte}
                   1,2,3,4,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0
               }

    || 暗号
    {encrypt 
        key, ||キー 
        {{Array-of byte} 50, 51, 52},
        {write-open-byte {url secret-file}}
    }
    
    {decrypt 
        key, ||キー 
        {read-open-byte {url secret-file}}
    }
}

 

 


 Ver.8よりAESを指定することができます。

 Algorithm.aes-128-cbc、 Algorithm.aes-192-cbc、 Algorithm.aes-256-cbc

上記サンプルにてアルゴリズム、キー長を変更することにより確認することができます。

 


 

ちなみに、以下の拡張ライブラリを利用するとさらに簡単に暗号化できます。

拡張ライブラリ(暗号・複合API)