【RPA】UiPath Invoke CodeでファイルをAES暗号化・復号化する

#RPA #UiPath #DX #ビジネス #ソフトウェア

RPAツールであるUiPathでは、アクティビティと呼ばれる処理の部品を選択して貼り付けることで、一連のコンピュータの動作を組み立てることができます。

各処理ではVisualBasic言語(VB.NET)によって、原則、1行だけのコードを書く(プログラミング)ことができます、。
それだけでは収まらない処理は「コードを呼び出し(Invoke Code)」というアクティビティによって、
複数行のコードをプログラミングすることができます。

Invoke Codeアクティビティは、原則、一つのVB.NETのSUB関数としての機能でしかなく、
一つの関数を作るようなイメージです。
(Invoke Codeアクティビティ内で複数の関数を定義することは現状ではできません)

今回は、Invoke Codeアクティビティによって、
パスワードにより、ファイルをAES暗号化・復号化するコードを作成しました。

暗号アルゴリズムで、現在、主流となっているのがAES(Advanced Encryption Standard)です。
共通鍵暗号化方式の一つで、暗号化と復号化に使う鍵が同じとする方式です。

■暗号化するInvoke Codeアクティビティ

まず、暗号化するInvoke Codeアクティビティの引数を定義します。

 In_Password String パスワード
 In_RawFile String 暗号化したいファイルパス
 In_EncFile String 暗号化ファイルパス
 Out_Result Boolean 結果
 Out_ErrorMessage String エラーメッセージ

ファイルを暗号化するInvoke CodeアクティビティのVB.NETコードは、
以下の処理を実施します。

①入力引数のチェックする
(パスワードは1~16文字長までで指定)
②パスワードから鍵と初期ベクトルを生成する
 (その際、ソルト値(Salt)は、固定で1~8の8バイトを設定)

③暗号化するファイルを読み込みモードで開き、ファイルストリームを生成する
④暗号化ファイルを作成し、書き込みモードで開き、ファイルストリームを生成する
⑤AesManagedインスタンスを生成し、以下の設定とする

鍵長=256ビット
ブロック長=128ビット
暗号アルゴリズム=CBC
パディング方式=PKCS7

⑥鍵値と初期ベクトルを指定し、暗号化エンジンインスタンスを生成する
⑦暗号化エンジンを使った書き込み用の暗号化ストリームを生成する
⑧4096バイトづつデータを読み込み、全データを暗号化する
⑨各種ハンドルのクローズ処理を実施する
⑩正常であれば、Out_ResultにTrue、Out_ErrorMessageに空文字("")を設定して終了する
 異常(例外発生)であれば、Out_ResultにFalse、Out_ErrorMessageにエラーメッセージ(例外メッセージ)を設定して終了する

画像13


■復号化するInvoke Codeアクティビティ

まず、復号化するInvoke Codeアクティビティの引数を定義します。

 In_Password String パスワード
 In_EncFile String 暗号化ファイルパス
 In_RawFile String 復号化ファイルパス
 Out_Result Boolean 結果
 Out_ErrorMessage String エラーメッセージ

ファイルを復号化するInvoke CodeアクティビティのVB.NETコードは、
以下の処理を実施します。

①入力引数のチェックする
(パスワードは1~16文字長までで指定)
②パスワードから鍵と初期ベクトルを生成する
 (その際、ソルト値(Salt)は、固定で1~8の8バイトを設定)

③暗号化ファイルを読み込みモードで開き、ファイルストリームを生成する
④復号化ファイルを作成し、書き込みモードで開き、ファイルストリームを生成する
⑤AesManagedインスタンスを生成し、以下の設定とする

鍵長=256ビット
ブロック長=128ビット
暗号アルゴリズム=CBC
パディング方式=PKCS7

⑥鍵値と初期ベクトルを指定し、復号化エンジンインスタンスを生成する
⑦復号化エンジンを使った読み込み用の復号化ストリームを生成する
⑧4096バイトづつ暗号化データを読み込み、全データを復号化する
⑨各種ハンドルのクローズ処理を実施する
⑩正常であれば、Out_ResultにTrue、Out_ErrorMessageに空文字("")を設定して終了する
 異常(例外発生)であれば、Out_ResultにFalse、Out_ErrorMessageにエラーメッセージ(例外メッセージ)を設定して終了する

画像14


■UiPathで暗号化のサンプルシーケンスの作成

画像6

以下の手順で暗号化のシーケンスを作成します。

①UiPathのプロジェクトを作成
②UiPathのシーケンスを作成
③UiPathの画面から以下をインポート

  System.Security.Cryptography

インポート

④作成したシーケンスのXAMLファイル(.xaml)をテキストエディタで開き、以下を追加

<TextExpression.NamespacesForImplementation>
<sco:Collection x:TypeArguments="x:String">
   ・・・
<x:String>System.Security.Cryptography</x:String>  ※追加
   ・・・
</sco:Collection>
</TextExpression.NamespacesForImplementation>

画像2

⑤以下の変数を定義します。

 Password String パスワード
 RawFile String 暗号化したいファイルパス
 EncFile String 暗号化ファイルパス
 Result Boolean 結果
 ErrorMessage String エラーメッセージ

enc_変数

⑥代入アクティビティを追加し、Password変数にパスワードを設定する

⑦代入アクティビティを追加し、RawFile変数に暗号化したいファイルのパスを設定する

⑧代入アクティビティを追加し、EncFile変数に暗号化ファイルのパスを設定する

⑨Invoke Codeアクティビティを追加し、コード編集で、暗号化コードを設定する
 その際、引数に対応する変数を設定する

 In_Password → Password
 In_RawFile → RawFile
 In_EncFile → EncFile
 Out_Result → Result
 Out_ErrorMessage → ErrorMessage

enc_引数

⑩メッセージログアクティビティを追加し、以下の結果を出力する

 Result=True(成功)/False(失敗)
 ErrorMessage=失敗したときのエラーメッセージ(例外メッセージ)

⑪実行する

画像5


■UiPathで復号化のサンプルシーケンスの作成

画像7

以下の手順で復号化のシーケンスを作成します。
(暗号化シーケンスと同様です)

①UiPathのプロジェクトを作成
②UiPathのシーケンスを作成
③UiPathの画面から以下をインポート

  System.Security.Cryptography

インポート

④作成したシーケンスのXAMLファイル(.xaml)をテキストエディタで開き、以下を追加

<TextExpression.NamespacesForImplementation>
<sco:Collection x:TypeArguments="x:String">
   ・・・
<x:String>System.Security.Cryptography</x:String>  ※追加
   ・・・
</sco:Collection>
</TextExpression.NamespacesForImplementation>

画像9

⑤以下の変数を定義します。

 Password String パスワード
 EncFile String 暗号化ファイルパス
 RawFile String 復号化ファイルパス
 Result Boolean 結果
 ErrorMessage String エラーメッセージ

dec_変数

⑥代入アクティビティを追加し、Password変数にパスワードを設定する

⑦代入アクティビティを追加し、
EncFile変数に暗号化ファイルのパスを設定する

⑧代入アクティビティを追加し、
RawFile変数に復号化ファイルのパスを設定する

⑨Invoke Codeアクティビティを追加し、コード編集で、復号化コードを設定する

 その際、引数に対応する変数を設定する

 In_Password → Password
 In_EncFile → EncFile
 In_RawFile → RawFile
 Out_Result → Result
 Out_ErrorMessage → ErrorMessage

dec_引数

⑩メッセージログアクティビティを追加し、以下の結果を出力する

 Result=True(成功)/False(失敗)
 ErrorMessage=失敗したときのエラーメッセージ(例外メッセージ)

⑪実行する

画像12

※本記事のサンプルコードに関しては、一切の責任を負いません。
 すべて自己責任でお願いいたします。


■上記のサンプルコードプロジェクトを提供します(著作権フリー)

①UiPathプロジェクト(UiPathPrj_InvokeCode_EncDec)

 2つのサンプルシーケンスを準備しました。

  暗号化シーケンス
  復号化シーケンス

 ※UiPath Community Editionで作成
  (UiPath Studio Pro 2020.10.0 Community License)

②VBコンソールアプリケーションプロジェクト(VBPrj_InvokeCode_EncDec)
 
 Invoke Codeアクティビティ内でデバックすることは困難なので、
 一度、VBコンソールアプリケーションとしてプログラミングし、
 デバックをしてからコピー&ペーストしたほうが効率的です。

 そのため、Invoke Codeアクティビティで動かす同じコードを
 VBプロジェクトから動作させるようにしてあります。

 ※Microsoft Visual Studio Community 2019 Version 16.7.6で作成
 (Microsoft.NET Framework Version 4.8.03752)

以下からサンプルコードをダウンロードできます。

ここから先は

24字 / 1ファイル

¥ 100

この記事が気に入ったらサポートをしてみませんか?