今回の記事では、VBAから.NET Frameworkのクラスを呼び出して、指定した文字列を暗号化(ハッシュ)する方法を紹介します。
また、一部のパソコンでは、この処理を実装しているコードで「-2146232576:オートメーションエラー」が発生したため、その原因も併せて紹介します。
VBAから.NET Frameworkのクラスを呼び出してハッシュ値を作成するコード例
当項では、VBAから.NET Frameworkのクラスを呼び出し、SHA-256などのハッシュアルゴリズムを使用して、引数で渡された文字列からハッシュ値を返すサンプルコードを紹介します。
Function get_HashString(ByVal targetStr As String)
Dim PROV As String
Dim BYTES As Variant
Dim ENC As Variant
Dim MSXML As Variant
Dim EL As Variant
'MD5
'PROV = "System.Security.Cryptography.MD5CryptoServiceProvider"
'SHA-1
'PROV = "System.Security.Cryptography.SHA1CryptoServiceProvider"
'SHA-2(SHA-256)
PROV = "System.Security.Cryptography.SHA256Managed"
BYTES = CreateObject("System.Text.UTF8Encoding").GetBytes_4(targetStr)
Set ENC = CreateObject(PROV)
ENC.ComputeHash_2 (BYTES)
Set MSXML = CreateObject("MSXML2.DOMDocument")
Set EL = MSXML.CreateElement("hex")
EL.DataType = "bin.hex"
EL.NodeTypedValue = ENC.Hash
get_HashString = EL.Text
End Function
上記のコードを簡単に解説します。
ハッシュアルゴリズムは色々な種類がありますが、MD5やSHA-1を使用したい場合は、コメントアウトされている部分をそれぞれ有効にしてください。
ただ、現在MD5やSHA1は脆弱性が報告されているため、ハッシュアルゴリズムの選定に制約がなければSHA256やSHA512を使用してください。
.NET Frameworkの「UTF8Encodingクラス」を呼び出して、引数で渡されてきた文字列をbyte型配列に変換して、変数「BYTES」に代入しています。
次に、同じく.NET Frameworkの「SHA256Managedクラス」を呼び出して、前処理で作成したbyte型配列をもとにハッシュを計算し、その後DOMDocumentオブジェクトを利用して16進数に変換しています。
参考までに、今回.NETの名前空間を指定して呼び出しているクラスの詳細が書かれているMicrosoftのリンクも貼っておきます。
併せてご確認ください。
また、当ブログでは、過去にC#の初心者向けの記事を公開しており、その記事のなかで「名前空間」などについても簡単に触れております。
ご興味があればこちらもご一読ください。
.NETのクラスを呼ぶ際に「-2146232576:オートメーションエラー」が発生する場合
VBAから.NET Frameworkのクラスを呼ぶ際に、「-2146232576:オートメーションエラー」が発生する原因について紹介します。
このエラーの発生原因が当記事で紹介する内容だけとは限りませんが、私の環境では以下が原因でした。
Windows 10 や Windows 11 の既定値では、.NET Frameworkの最新である4.8が有効化されており、以前のバージョンである3.5(2.0及び3.0)は無効化されています。
今回の記事で紹介している.NET FrameworkのクラスをVBAなどから呼び出す場合、.NET Framework 3.5を有効にしてあげることが必要です。
.NET Framework 3.5を有効にする方法
ネットで調べれば、手順はすぐに見つかるかと思いますが、当記事でも簡単に紹介しておきます。
Windowsの「コントロールパネル」から「プログラムと機能」を開きます。
「プログラムと機能」の画面左側の「Windowsの機能の有効化または無効化」を開きます。
表示された「Windowsの機能」画面内の「.NET Framework 3.5(.NET 2.0及び3.0を含む)」のチェックを付けて「OK」を選択します。
次の画面では「Windows Updateでファイルを自動ダウンロードする」を選択すれば、.NET Framework 3.5のダウンロード、及びインストール処理が実行されて、3.5が有効化されます。
最後に
今回の記事では、VBAから.NET Frameworkのクラスを呼び出してハッシュを生成するサンプルコードと、.NETのクラスを呼び出す際に、「-2146232576:オートメーションエラー」が発生した場合の対応方法を紹介しました。
この記事がどなたかの参考になれば幸いです。
今回も読んでいただきましてありがとうございました。
それでは皆さまごきげんよう。