[.NET 6] SHA256 や MD5 の 16 進ハッシュ文字列を得る
こんにちは、kenzauros です。
過去に C# で SHA256 や MD5 のハッシュ文字列を得る 方法を紹介しましたが、 .NET 6 で一部が非推奨になったため更新版を紹介します。
ソースコード
更新版は下記のとおりです。ついでに、拡張メソッドにしました。
- C# で SHA256 のハッシュ文字列を得る - gist (
GetSHA256HashedString_net6.cs
)
using System.Linq;
using System.Security.Cryptography;
using System.Text;
public static class StringExtensions
{
static readonly HashAlgorithm hashAlgorithm = SHA256.Create();
public static string GetSHA256HashedString(this string value)
=> string.Join("", hashAlgorithm.ComputeHash(Encoding.UTF8.GetBytes(value)).Select(x => $"{x:x2}"));
}
使い方
下記のように使用できます。
string hash = "test".GetSHA256HashedString();
Console.WriteLine(hash);
// will show "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
16 進文字列を大文字にしたい場合は $"{x:x2}"
を $"{x:X2}"
と変えれば OK です。
背景
SHA256CryptoServiceProvider
などを直接インスタンス化することが非推奨になりました。
インスタンス化しようとすると下記のようなエラーになります。
Derived cryptographic types are obsolete. Use the Create method on the base type instead.
「代わりに基本クラスの Create
メソッドを使いたまえ」とのことですので、愚直に従いましょう。 SHA256.Create()
と、直感的に書けるようになりました。 SHA256 の場合、内部的には SHA256Managed
が使用されるようです。
その他のハッシュ関数
.NET の System.Security.Cryptography 名前空間にはほかにもハッシュアルゴリズムが用意されています。SHA256
の部分を置き換えるだけでそれらを利用できます。
ハッシュ方式 | 生成方法 |
---|---|
MD5 | MD5.Create() |
SHA1 | SHA1.Create() |
SHA256 | SHA256.Create() |
SHA384 | SHA384.Create() |
SHA512 | SHA512.Create() |
byte 配列も対応するとき
byte 配列にも対応する場合は、 byte 配列を引数としたメソッドを定義して、そちらをベースにするとよいでしょう。
public static class SHA256Extensions
{
static readonly HashAlgorithm hashAlgorithm = SHA256.Create();
public static string GetSHA256HashedString(this byte[] value)
=> string.Join("", hashAlgorithm.ComputeHash(value).Select(x => $"{x:x2}"));
public static string GetSHA256HashedString(this string value)
=> GetSHA256HashedString(Encoding.UTF8.GetBytes(value));
}