【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にエラーメッセージ(例外メッセージ)を設定して終了する
■復号化する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にエラーメッセージ(例外メッセージ)を設定して終了する
■UiPathで暗号化のサンプルシーケンスの作成
以下の手順で暗号化のシーケンスを作成します。
①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>
⑤以下の変数を定義します。
Password String パスワード
RawFile String 暗号化したいファイルパス
EncFile String 暗号化ファイルパス
Result Boolean 結果
ErrorMessage String エラーメッセージ
⑥代入アクティビティを追加し、Password変数にパスワードを設定する
⑦代入アクティビティを追加し、RawFile変数に暗号化したいファイルのパスを設定する
⑧代入アクティビティを追加し、EncFile変数に暗号化ファイルのパスを設定する
⑨Invoke Codeアクティビティを追加し、コード編集で、暗号化コードを設定する
その際、引数に対応する変数を設定する
In_Password → Password
In_RawFile → RawFile
In_EncFile → EncFile
Out_Result → Result
Out_ErrorMessage → ErrorMessage
⑩メッセージログアクティビティを追加し、以下の結果を出力する
Result=True(成功)/False(失敗)
ErrorMessage=失敗したときのエラーメッセージ(例外メッセージ)
⑪実行する
■UiPathで復号化のサンプルシーケンスの作成
以下の手順で復号化のシーケンスを作成します。
(暗号化シーケンスと同様です)
①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>
⑤以下の変数を定義します。
Password String パスワード
EncFile String 暗号化ファイルパス
RawFile String 復号化ファイルパス
Result Boolean 結果
ErrorMessage String エラーメッセージ
⑥代入アクティビティを追加し、Password変数にパスワードを設定する
⑦代入アクティビティを追加し、
EncFile変数に暗号化ファイルのパスを設定する
⑧代入アクティビティを追加し、
RawFile変数に復号化ファイルのパスを設定する
⑨Invoke Codeアクティビティを追加し、コード編集で、復号化コードを設定する
その際、引数に対応する変数を設定する
In_Password → Password
In_EncFile → EncFile
In_RawFile → RawFile
Out_Result → Result
Out_ErrorMessage → ErrorMessage
⑩メッセージログアクティビティを追加し、以下の結果を出力する
Result=True(成功)/False(失敗)
ErrorMessage=失敗したときのエラーメッセージ(例外メッセージ)
⑪実行する
※本記事のサンプルコードに関しては、一切の責任を負いません。
すべて自己責任でお願いいたします。
■上記のサンプルコードプロジェクトを提供します(著作権フリー)
①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)
以下からサンプルコードをダウンロードできます。
ここから先は
¥ 100
この記事が気に入ったらサポートをしてみませんか?