Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9749

.NET Core で RIPEMD160 を使おう! with Bouncy Castle

$
0
0

ハッシュアルゴリズムの RIPEMD160 を Bouncy Castle を使って C# で実装した時のメモです。
このアルゴリズムは Bitcoin 等に使われてますね!

環境

  • .NET Core 3.1

RIPEMD160 が消えた

公式ドキュメントを見るとわかる通り、 .NET Framework では RIPEMD160 アルゴリズムが公式にサポートされていましたが、.NET Core では削除されていました。
リポジトリの Issue を見るに、(私の拙い英語力で解釈すると)
「OS 側で提供されないアルゴリズムは .NET Core では実装しないよ!」ということでしょうか?
困りました。

Bouncy Castle を使おう

Bouncy Castle は暗号化ライブラリの一つです。言語は Java と C# がサポートされています。
.NET Core でも使えます。
Nugetからサクっといれちゃいましょう。
執筆時点(2020/08/24)ではバージョンが最新ではないみたいなので、気になるようであればリポジトリの Releaseからどうぞ。

使い方

Org.BouncyCastle.Crypto.Digests 名前空間の RipeMD160Digest クラスを使います。
コード自体は簡単なものになります。

classProgram{staticvoidMain(string[]args){vardata=Encoding.UTF8.GetBytes("abcdefg");vardigest=newRipeMD160Digest();varresult=newbyte[digest.GetDigestSize()];digest.BlockUpdate(data,0,data.Length);digest.DoFinal(result,0);WriteBytes(result);//874f9960c5d2b7a9b5fad383e1ba44719ebb743a}privatestaticvoidWriteBytes(IEnumerable<byte>bytes){Console.WriteLine(string.Join("",bytes.Select(x=>$"{x:x2}")));}}
  1. RIPEMD160 のインスタンスを生成して、
  2. BlockUpdate を呼び出して、
  3. DoFinal で結果を得る。

という単純な使い方です。
(RipeMD160 の仕様は長さが20バイトなので、digest.GetDigestSize()の値も 20 で固定です。)

参考にしたもの

RipeMD160Digest.cs
GeneralDigest.cs

Bouncy Castle は C# に対するドキュメントが無いため、学ぶにはソースコードを読む必要があるなど一苦労かかりますね!
私の記事がなにかお役に立てれば幸いです。


Viewing all articles
Browse latest Browse all 9749

Trending Articles