【VBA】Excelでハッシュ値を計算する【SHA256】【MD5】

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【VBA】Excelでハッシュ値を計算する【SHA256】【MD5】

2023-1-25 | ,

Excel(VBA)でハッシュ値(SHA256とMD5)を求めたい!

連日、VBA 関連の記事なのは、本業のせいです!

概要

今回の記事では、Excel(VBA)でハッシュ値を求める手順を掲載する。

ハッシュ値を求めるアルゴリズムはいろいろあるんだけども、今回はSHA256とMD5の2パターンを紹介する。

SHA256はSHA-2のバリエーションの1つで、SHA-2は前身のSHA-1を改良したアルゴリズムになってる。SHA-2を改良したSHA-3というアルゴリズムもあるが、2023年1月現在、SHA-2で特に問題が発生してないこともあってSHA-2が主流となってる。…らしい。

MD5よりもSHA256の方がセキュリティ的に良いです。MD5は資料として掲載してるということで。

仕様書

  • Excel 2212

手順書

SHA256(SHA-2)とMD5の2パターンのサンプルを挙げる。

SHA2-256(SHA-2)

下記はSHA256(SHA-2)でハッシュ値を求めるサンプル。

Option Explicit

Public Function HASH_SHA256(str As String) As String
    Dim sha256m As Object
    Dim utf8 As Object
    Dim bytes() As Byte
    Dim hash() As Byte
    Dim i As Integer
    Dim res As String

    Set utf8 = CreateObject("System.Text.UTF8Encoding")
    bytes = utf8.GetBytes_4(str)

    Set sha256m = CreateObject("System.Security.Cryptography.SHA256Managed")
    hash = sha256m.ComputeHash_2((bytes))

    For i = LBound(hash) To UBound(hash)
        res = res & LCase(Right("0" & Hex(hash(i)), 2))
    Next i

    HASH_SHA256 = LCase(res)
End Function

MD5

下記はMD5でハッシュ値を求めるサンプル。

Option Explicit

Public Function HASH_MD5(str As String) As String
    Dim md5 As Object
    Dim utf8 As Object
    Dim bytes() As Byte
    Dim hash() As Byte
    Dim i As Integer
    Dim res As String

    Set utf8 = CreateObject("System.Text.UTF8Encoding")
    bytes = utf8.GetBytes_4(str)

    Set md5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
    hash = md5.ComputeHash_2(bytes)

    For i = LBound(hash) To UBound(hash)
        res = res & LCase(Right("0" & Hex(hash(i)), 2))
    Next i

    HASH_MD5 = LCase(res)
End Function

出力サンプル

例えば、HASH_SHA256関数に当サイトのURLのhttps://blog.nekonium.comを引数で渡すと
25071def8c9caf1a9454905a2b4ee18c048c1245a6f81a7a9f14419bad8e040dというハッシュ値が出力される。

Excelの式にすると=HASH_SHA256("https://blog.nekonium.com")みたいな感じ。

まとめ(感想文)

Excelで事前にハッシュ値を掲載しておき、CSVでエクスポート、なんらかのシステムにインポート。みたいな?感じのことする時に便利かもね!

関数名をそれぞれ SHA256、MD5にしたかったんだけど、その関数名だとシートの座標扱いになって、シート上で使えなかった悲しみ。

参考書

下は、すんごい昔に読んでいた参考書の最新版。
載せておいて難ですが、今は本よりGoogle先生に聞いた方が良い。
本の内容的には、できることがずらーっと載っているので、どんなことができるかカタログ的に確認したい場合にはお薦め。トイレで読むとか。

kindle unlimitedに加入してると無料で読めるらしい。