【RPA】UiPath Invoke Codeでファイルのハッシュ値を生成する

RPAツールであるUiPathでは、
GUIによってアクティビティと呼ばれる処理の部品を選択して貼り付けることで、
パソコンで行うための一連の動作を組み立てることができます。

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

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

今回は、Invoke Codeアクティビティによって、
ファイルのハッシュ値を生成するコードを作成しました。

ハッシュ値を生成するアルゴリズムは、主に、SHA-1(Secure Hash Algorithm 1)とSHA-2(Secure Hash Algorithm 2)です。
さらに、SHA-2(Secure Hash Algorithm 2)には、SHA256、SHA384、SHA512などがあります。

ハッシュ値は、原則、データ毎に特有の値を持ち、データが異なれば違うハッシュ値を持ちます。

■ハッシュ値を生成するInvoke Codeアクティビティの説明

まず、ハッシュ値を生成するInvoke Codeアクティビティの引数を定義します。

In_Mode As String 入力:ハッシュモード("SHA-1" or "SHA256" or "SHA384" or "SHA512")
In_File As String 入力:ファイルパス
Out_Result As Boolean 出力:結果
Out_ErrorMessage As String 出力:エラーメッセージ
Out_Hash As String 出力:ハッシュ値

画像1


ハッシュ値を生成するInvoke CodeアクティビティのVB.NETコードは、
以下の処理を実施します。

①入力引数のチェックする
②ファイルを読み込みモードで開き、ファイルストリームを生成する
③ファイルからデータを読み込むバッファを確保する
④ファイルからデータを読み込む
⑤モード指定毎にハッシュ生成インスタンスを生成し、ハッシュ値を生成
⑥各種ハンドルのクローズ処理を実施する
⑦正常であれば、Out_ResultにTrue、Out_ErrorMessageに空文字("")、Out_Hashにハッシュ値を設定して終了する
 異常(例外発生)であれば、Out_ResultにFalse、Out_ErrorMessageにエラーメッセージ(例外メッセージ)を設定して終了する

画像2

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

画像3

以下の手順で2つのファイル(testA.pdfとtestB.pdf)のハッシュ値を生成し、比較するシーケンスを作成します。

①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>

画像5

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

 Mode String パスワード
 File String ファイルパス
 Result Boolean 結果
 ErrorMessage String エラーメッセージ
 HashA String ハッシュ値(testA.pdfのハッシュ値)
 HashB String ハッシュ値(testB.pdfのハッシュ値)

画像6

⑥代入アクティビティを追加し、Mode変数に"SHA256"を設定する

⑦代入アクティビティを追加し、File変数にファイルのパス(testA.pdf)を設定する

⑧Invoke Codeアクティビティを追加し、コード編集でハッシュ値を生成するコードを設定する
 その際、引数に対応する変数を設定する

 In_Mode → Mode
 In_File → File
 Out_Result → Result
 Out_ErrorMessage → ErrorMessage
 Out_Hash → HashA

画像7

⑨条件分岐アクティビティを追加する

⑩条件分岐アクティビティで、Result=True(成功)のとき以下を設定する

 ⑩-1 代入アクティビティを追加し、Mode変数に"SHA256"を設定する

 ⑩-2 代入アクティビティを追加し、File変数にファイルのパス(testB.pdf)を設定する

 ⑩-3 Invoke Codeアクティビティを追加し、コード編集でハッシュ値を生成するコードを設定する
  その際、引数に対応する変数を設定する

 In_Mode → Mode
 In_File → File
 Out_Result → Result
 Out_ErrorMessage → ErrorMessage
 Out_Hash → HashB

画像8

⑩-4 条件分岐アクティビティを追加する

⑩-4-1 HashAとHashBを比較し、一致すれば"same"、不一致であれば"different"を出力する

⑪実行する


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


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

①UiPathプロジェクト(UiPathPrj_InvokeCode_HASH)
以下のサンプルシーケンスを準備しました。

  2つのファイル(testA.pdfとtestB.pdf)のハッシュ値を生成し、比較するシーケンスシーケンス

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

②VBコンソールアプリケーションプロジェクト(VBPrj_InvokeCode_HASH)
 
 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

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