0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

パスワードをハッシュ化(ソルト、ストレッチング)(VB.NET)

Last updated at Posted at 2023-04-13

この記事の注意事項

この記事はこちらの記事の内容を修正した内容となります。

対処したこと

パスワードのテキストフォームをマスク

テキストフォームを選択し、プロパティのPasswordCharにアスタリスクを入力します。
image.png
またはコード上で、以下のようにコードを書き、実行します。

txtPassword.PasswordChar = "*"

デバックすると、パスワードがマスクされていることが確認できます。
image.png

テキストの入力文字数の制限

テキストフォームを選択し、プロパティのMaxLengthに文字数を入力します。
image.png
またはコード上で、以下のようにコードを書き、実行します。

txtUserID.MaxLength = 8

パスワードの表記

チェックボックスを追加し、チェックボックスの有無でパスワードを表記します。
image.png
チェックボックスをON/OFFした際、パスワードの表記を制御するための処理を追加します。

    Private Sub ckbPassword_CheckedChanged(sender As Object, e As EventArgs) Handles ckbPassword.CheckedChanged
        If ckbPassword.Checked Then
            txtPassword.PasswordChar = ""
        Else
            txtPassword.PasswordChar = "*"
        End If
    End Sub

パスワードのハッシュ化

パスワードをハッシュ化するクラスを作成します。メソッド内では、ソルトやストレッチングも行っています。なおSQL Server側で、パスワードの文字数を変更する必要があります。

Imports System.Security.Cryptography

''' <summary>
''' ハッシュ化装置
''' </summary>
Public Class clsCryptoHasher
    Private _getHushPassword As String
    Public ReadOnly Property getHushPassword() As String
        Get
            Return _getHushPassword
        End Get
    End Property
    Private saltSeed As String = System.Environment.GetEnvironmentVariable("DEV_SALT_SEED")
    Private stretchingTimes As Integer = System.Environment.GetEnvironmentVariable("DEV_STRETCHING_TIMES")

    ''' <summary>
    ''' ハッシュ化を計算する
    ''' </summary>
    ''' <param name="systemErrorFlag">システムエラーフラグ</param>
    ''' <param name="userID">ユーザーID</param>
    ''' <param name="password">パスワード</param>
    ''' <returns>システムエラーフラグ</returns>
    Public Function calcHushPassword(ByRef systemErrorFlag As Boolean, ByRef userID As String, ByRef password As String) As Boolean

        Try
            'ソルト化
            Dim saltPassword As String = String.Concat(userID, password, saltSeed)

            'ストレッチング
            For stretching = 1 To stretchingTimes
                'ハッシュ化
                If Me.generateHash(systemErrorFlag, saltPassword) Then Exit Try
            Next
            _getHushPassword = saltPassword

        Catch ex As Exception
            systemErrorFlag = True
            MessageBox.Show("エラーが発生しました: " & ex.Message)
        Finally
        End Try

        Return systemErrorFlag
    End Function


    ''' <summary>
    ''' ハッシュ化する
    ''' </summary>
    ''' <param name="systemErrorFlag">システムエラーフラグ</param>
    ''' <param name="password">パスワード</param>
    ''' <returns>システムエラーフラグ</returns>
    Private Function generateHash(ByRef systemErrorFlag As Boolean, ByRef password As String) As Boolean

        Try
            'パスワードをバイト配列に変換する
            Dim Bytes() As Byte = System.Text.Encoding.UTF8.GetBytes(password)

            'SHA256ハッシュアルゴリズムを使用してハッシュ値を計算する
            Dim sha256 As SHA256 = SHA256.Create()
            Dim hashBytes() As Byte = sha256.ComputeHash(Bytes)

            'ハッシュ値をBase64文字列に変換する
            password = Convert.ToBase64String(hashBytes)

        Catch ex As Exception
            systemErrorFlag = True
            MessageBox.Show("エラーが発生しました: " & ex.Message)
        Finally
        End Try

        Return systemErrorFlag
    End Function

End Class

無題.png

注意事項

  • この記事では、SQL Server、SSMS、visual studioを使用しているので、試してみたい方は事前に準備が必要です。
  • 本記事に掲載されているコードは掲載用にサンプルとして掲載しているものです。したがって本記事を参考にし、コーディングを進める場合は作成しているアプリに応じて、各自で判断して、適応してください。
  • 関連する記事の一覧はこちら
    ※参照先のリンクが切れている場合は、トップページから確認してください。

この記事は誰向けの記事か?

  • ハッシュ化などについての実装コードを確認してみたい人
  • ハッシュ化などの対処方法を一通り確認したい人

環境

本記事における注意事項

  • 本記事は、備忘録としてまとめたものになります。
  • 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
  • また記載内容はすべて、正しい内容が記載されているとは限りません。
  • 誤った内容を見つけた場合は、ご指摘をお願いいたします。
  • この記事の内容では、一部、ChatGPTを利用しております。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?