ハッシュ化(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:
コメントを送信