ハッシュ化(SHA256)計算用のVBAマクロ例について

パスワード等を平文では、DB等に登録することは避けたいことがあるかと思います。SHA256 などでハッシュ化して登録するために、一番身近な言語のVBAにて、変換方法をプログラム化しました。参考にご覧ください。

💻SHA256のハッシュ化ロジック

【1】SHA256のハッシュ化処理(VBA場合)

  1. 以下の「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」の変数を割り当て、結果を取得するものです。(記載のセル位置は、サンプルとして記載しているので、利用する側にて自由に変更ください。)

33f495021ef05809b53b856ea7250b0d-1024x604 ハッシュ化(SHA256)計算用のVBAマクロ例について

・以下が上記画面から起動して、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:

コメントを送信

CAPTCHA