VB.NET ハッシュ値を取得するサンプル

VB.NETのハッシュ値を取得するサンプルです。

目次

サンプル ハッシュ値とは
  SHA-256のサンプル
  MD5のサンプル

ハッシュ値とは

ハッシュ値のイメージ:
fdb481ea956fdb654afcc327cff9b626966b2abdabc3f3e6dbcb1667a888ed9a

ハッシュ値は、文字列からハッシュ値へ変換した場合、そのハッシュ値から元の文字列に戻すことはできないという特徴があります。

使用例としてWEBシステムでユーザが入力したパスワードをハッシュ値にしてDBに保存し
再度ユーザがログインした時、入力されたパスワードをハッシュ値にしてDBにあるハッシュ値と比較し確認する等あります。パスワードをDBにそのまま保存するより良くなります。

また通常はソルト(salt:塩)を使用します。ソルトとは、元のデータに任意の文字列を付加してからハッシュ値にすることでセキュリティの強度を高めます。

さらに安全性を高める場合は、ストレッチング(ハッシュ値の計算を繰り返し行う)を行います。

以下は、MicroSoftのハッシュ値計算のリンクです。
https://docs.microsoft.com/ja-jp/troubleshoot/dotnet/csharp/compute-hash-values

SHA-256のサンプル

SHA-256は、256bitのハッシュ値(64桁)を出力します。よく使用されています。256以上が推奨です。

Imports System.Security.Cryptography
Imports System.Text

Module Module1
	Sub Main()
		Console.WriteLine(Class1.GetHashValue("あいうえお"))
		'fdb481ea956fdb654afcc327cff9b626966b2abdabc3f3e6dbcb1667a888ed9a

		Console.WriteLine(Class1.GetHashValue("あいうABC123"))
		'eac7b740f6b015b37fcf86d3c7ca404caa84d1ab4ea2d9974d4ad0d410f38b9a
	End Sub
End Module
Public Class Class1
	Public Shared Function GetHashValue(str1 As String) As String

		Dim ar1() As Byte = Encoding.UTF8.GetBytes(str1)
		Dim ar2() As Byte =
			New SHA256CryptoServiceProvider().ComputeHash(ar1)

		' バイト配列 → 16進数文字列
		Dim str2 As StringBuilder = New StringBuilder()
		For Each b1 As Byte In ar2
			str2.Append(b1.ToString("x2"))
		Next
		Return str2.ToString
	End Function
End Class

6行目と9行目の文字数は異なりますが、出力される桁数は同じです。

MD5のサンプル

MD5は、128bitのハッシュ値(32桁)を出力します。安全性は低いです。

Imports System.Security.Cryptography
Imports System.Text

Module Module1
	Sub Main()
		Console.WriteLine(Class1.GetHashValue("あいうえお"))
		'86deb27a32903da70a7b2348fcf36bc3

		Console.WriteLine(Class1.GetHashValue("あいうABC123"))
		'5275d678c4f68d2c2ff37c25c842378e
	End Sub
End Module
Public Class Class1
	Public Shared Function GetHashValue(str1 As String) As String

		Dim ar1() As Byte = Encoding.UTF8.GetBytes(str1)
		Dim ar2() As Byte =
			New MD5CryptoServiceProvider().ComputeHash(ar1)


		' バイト配列 → 16進数文字列
		Dim str2 As StringBuilder = New StringBuilder()
		For Each b1 As Byte In ar2
			str2.Append(b1.ToString("x2"))
		Next
		Return str2.ToString
	End Function
End Class

6行目と9行目の文字数は異なりますが、出力される桁数は同じです。

関連の記事

VB.NET入門 クラスの仕組みとサンプル

△上に戻る