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に加入してると無料で読めるらしい。