ハッシュ化(SHA256)計算用のVBAマクロ例について
パスワード等を平文では、DB等に登録することは避けたいことがあるかと思います。SHA256 などでハッシュ化して登録するために、一番身近な言語のVBAにて、変換方法をプログラム化しました。参考にご覧ください。
💻SHA256のハッシュ化ロジック
【1】SHA256のハッシュ化処理(VBA場合)
- 以下の「GetSHA256HashFromString」の処理に変換したい文字列を設定して、返答結果を取得してください。
Function GetSHA256HashFromString(textToHash As String) As String
Dim shell As Object
Dim command As String
Dim exec As Object
Dim output As String
Dim encodedText As String
' 引数のエスケープ
encodedText = Replace(textToHash, """", "`""") ' ダブルクオートを PowerShell で安全に処理
' PowerShell コマンド文字列(文字列から SHA256 を算出)
command = "powershell -command ""$txt = '" & encodedText & "'; " & _
"$sha256 = [System.Security.Cryptography.SHA256]::Create(); " & _
"$bytes = [System.Text.Encoding]::UTF8.GetBytes($txt); " & _
"$hash = $sha256.ComputeHash($bytes); " & _
"$hex = -join ($hash | ForEach-Object { $_.ToString('x2') }); " & _
"Write-Output $hex"""
' 実行
Set shell = CreateObject("WScript.Shell")
Set exec = shell.exec(command)
output = exec.StdOut.ReadAll
' 結果を整形して返す
GetSHA256HashFromString = Trim(output)
End Function
例:
'ハッシュ変換処理
retVal = GetSHA256HashFromString(変換したい文字列(変数でも、直書きでも可))
結果は、retValへ。
【2】EXCELシートを利用した呼び出しサンプル(VBA(Excel)場合)
・EXCELにシート名「DSP」を作成して、同一シートに「ハッシュ計算実行」ボタンを配置、G8セルに「DSP_PASSWORD_INPUT」、H10セルに「DSP_PASSWORD_OUTPUT」の変数を割り当て、結果を取得するものです。(記載のセル位置は、サンプルとして記載しているので、利用する側にて自由に変更ください。)

・以下が上記画面から起動して、EXCEL VBAでハッシュ化処理の呼び出しするVBAサンプルです。
Public Const CONST_DISP = "DSP"
Public Const CONST_PASSWORD = "DSP_PASSWORD_INPUT" '入力セル値
Public Const CONST_PASSWORD_OUTPUT = "DSP_PASSWORD_OUTPUT" '出力力セル値
Sub ハッシュ計算実行_Click()
On Error GoTo ErrorLabel
Dim objWk As Workbook
Dim objsh As Worksheet
Dim ret As Boolean
Set objWk = ThisWorkbook
Set objsh = objWk.Worksheets(CONST_DISP)
If Len(Trim(objsh.Range(CONST_PASSWORD).Value)) <= 0 Then
MsgBox "パスワードの入力がありません。入力して下さい。"
' 異常を設定して処理を抜ける
Exit Sub
End If
'ハッシュ変換処理
objsh.Range(CONST_PASSWORD_OUTPUT).Value = GetSHA256HashFromString(Trim(objsh.Range(CONST_PASSWORD).Value))
Set objsh = Nothing
GoTo ExitLabel
ErrorLabel:
MsgBox Err.Description & vbCrLf & "処理名=ハッシュ計算実行_Click"
' 異常を返す
Exit Sub
ExitLabel:
Exit Sub
End Sub
是非、お試しあれ。
Share this content:
コメントを送信