この記事の注意事項
この記事はこちらの記事の内容を修正した内容となります。
対処したこと
パスワードのテキストフォームをマスク
テキストフォームを選択し、プロパティのPasswordCharにアスタリスクを入力します。
またはコード上で、以下のようにコードを書き、実行します。
txtPassword.PasswordChar = "*"
デバックすると、パスワードがマスクされていることが確認できます。
テキストの入力文字数の制限
テキストフォームを選択し、プロパティのMaxLengthに文字数を入力します。
またはコード上で、以下のようにコードを書き、実行します。
txtUserID.MaxLength = 8
パスワードの表記
チェックボックスを追加し、チェックボックスの有無でパスワードを表記します。
チェックボックスを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
注意事項
- この記事では、SQL Server、SSMS、visual studioを使用しているので、試してみたい方は事前に準備が必要です。
- 本記事に掲載されているコードは掲載用にサンプルとして掲載しているものです。したがって本記事を参考にし、コーディングを進める場合は作成しているアプリに応じて、各自で判断して、適応してください。
- 関連する記事の一覧はこちら。
※参照先のリンクが切れている場合は、トップページから確認してください。
この記事は誰向けの記事か?
- ハッシュ化などについての実装コードを確認してみたい人
- ハッシュ化などの対処方法を一通り確認したい人
環境
- OS:Windows10
- SQL Server
- SQL Server Management Studio(SSMS):v19.0.2
- visual studio 2022
- ChatGPT
本記事における注意事項
- 本記事は、備忘録としてまとめたものになります。
- 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
- また記載内容はすべて、正しい内容が記載されているとは限りません。
- 誤った内容を見つけた場合は、ご指摘をお願いいたします。
- この記事の内容では、一部、ChatGPTを利用しております。