備忘録

備忘録

C#

.NET 難読化ツール「Obfuscar」の使い方

Ⅰ. はじめに 無料で利用できる難読化ツール Obfuscar の使い方です。 GitHubでソースコードが公開されています。 https://github.com/lextm/obfuscar Ⅱ. 使い方 1. NuGetから必要なライブラリをインストールします Install-Package Obfuscar 2. プロジェクト…

C# 16進数文字列をbyte[]に変換する方法

C#

Ⅰ. はじめに Ⅲ. 16進数文字列→byte[] Ⅳ. byte[] → 16進数文字列 Ⅰ. はじめに タイトルの通り「16進数文字列をbyte[]に変換する方法」です。 Ⅲ. 16進数文字列→byte[] Main.cs static void Main(string[] args) { byte[] bytes = "01 02 03".ToByteArray(); //…

C# で Redis を使う

Ⅰ. はじめに タイトルの通り「C# で Redis を使う方法」です。 ライブラリは「StackExchange.Redis」を使います。 Ⅱ. 使い方 NuGetから必要なライブラリをインストールします Install-Package StackExchange.Redis 文字列をセットする var redis = Connectio…

C# でSMTP サーバを建ててメールを受信する方法

C#

Ⅰ. はじめに タイトルの通り「C# でSMTP サーバを建ててメールを受信する方法」です。 cosullivan/SmtpServer を使います ※画像はWikipediaより Ⅱ. やり方 1. NuGetから必要なライブラリをインストールする Install-Package SmtpServer Install-Package Mime…

C#でHttpClientにSOCKS Proxyを利用する方法

C#

Ⅰ. はじめに Ⅱ. やり方(.NET6以上の場合) 1. サンプルプログラム 2. 実行結果 Ⅲ. やり方(HttpToSocks5Proxyを利用する方法) 1. NuGetから HttpToSocks5Proxy をインストールする 2. サンプルプログラム 3. 実行結果 留意点 Ⅳ. やり方(DotNet4.SocksProx…

C# 7.1 非同期Mainを使う

C#

Ⅰ. はじめに C# 7.1の新機能の1つに「非同期Main」があります。 C# 7までは Main関数で async/await は利用不可でした。 C# 7 まで static void Main(string[] args) => MainAsync().Wait(); static async Task MainAsync() { await Task.Delay(1); Console.…

C# Zlibで圧縮、展開する

C#

Ⅰ. はじめに Zlibのマジックナンバーは2バイトです。 「78 DA」「78 01」「78 9C」等がメジャーです。 詳しくはRFC 1950で定義されています。 https://www.ietf.org/rfc/rfc1950.txt Ⅱ. やり方 NuGetパッケージをインストールする Install-Package Iconic.Zl…

HttpClient で任意のHTTPヘッダを指定した時 FormatException が発生する

C#

Ⅰ. はじめに 通常HttpClientでHTTPヘッダを指定する場合は以下のように書くことが出来ます。 var client = new HttpClient(); client.DefaultRequestHeaders.Add("User-Agent", "hoge"); しかし、User-AgnetやAuthorization等のよく知られたヘッダは自動的に…

C#でDiscord BOTを作る方法

Ⅰ. はじめに Ⅱ. 環境 Ⅲ. echo botの作り方 1. 新規アプリケーションを作成する 2. BOTとして設定する 3. Tokenをコピーする 4. OAuthのリンクを作成する 5. 4で作成したURLにアクセスし、BOTを自分のサーバに招待する 6. NuGet から Discord.Net をインスト…

.NET CoreでSystem.Drawingを使う

Ⅰ. はじめに System.Drawing は WindowsのGDI+に依存している為、標準の.NET Coreで利用することができません。 解決策として System.Drawing.Common を使う方法を紹介します。 Ⅱ. やり方 1. NuGetからインストールする Install-Package System.Drawing.Comm…

C#でテンプレートマッチを行う

C#

Ⅰ. はじめに OpenCV3 のラッパーである OpenCvSharp の MatchTemplate メソッドを使ってテンプレートマッチを行います。 Ⅱ. サンプル スクリーンショットを取り、メモ帳のアイコンを探すサンプルです。 NuGet から OpenCV3 のラッパーをインストールする。 I…

C# で HMACSHA256を計算する

C#

string CalculateHMACSHA256(byte[] bytes) { using (var hmacsha256 = new HMACSHA256(key)) { var bs = hmacsha256.ComputeHash(bytes); return BitConverter.ToString(bs).ToLower().Replace("-", ""); } } // 出力例 // b248bb2b861e5efe1e5bea3722b19c6…

C#で bzip2 の圧縮、展開を行う方法

C#

Ⅰ. はじめに タイトルの通り「C#で bzip2 の圧縮、展開を行う方法」です。 bzip2のマジックナンバーは「BZh」(45 5A 68)です。 Ⅱ. SharpZipLib をインストールする SharpZipLib というライブラリを使います。 1. NuGet から SharpZipLib で検索し、インスト…

WebSocket4Net C# .NET Standard対応 WebSocket クライアントライブラリ

Ⅰ. はじめに WebSocket4Net は2017/05/11 時点でベータ段階ですが .NET Standard 対応の WebSocket ライブラリです。 Ⅱ. 使い方 1. 「WebSocket4Net」で検索し、インストールする 2. サンプルプログラム using System; using WebSocket4Net; namespace WebSo…

C# で HtmlAgilityPack を使って HTML の要素値を XPath で取得する

C#

Ⅰ. はじめに タイトルの通り、「C# で HtmlAgilityPack を使って HTML の要素値を XPath で取得する」方法です。 Web スクレイピングが簡単になります。 Ⅱ. サンプル http://example.comの「タイトル」と「リンク先(href)の値」を取得するサンプルです。 1.…

C#でSMTP, Mailgun, SendGridなどを利用してメールを送信する方法

C#

Ⅰ. はじめに メール配信サービスのAPIをラップした FluentEmail というライブラリの紹介です。 .NET Standard で作られているためクロスプラットフォームで動作します。各サービスの API ドキュメントには HttpClient や RestClient 等を使って Web API を直…

.NET Core で 実行ファイル(exe)を作成する方法

Ⅰ. はじめに Ⅱ. FDD と SCD の違いについて .NET Core 3.0 以上の場合 .NET Core 2.x 以下の場合 Ⅲ. FDD のやり方 以下のコマンドを実行する Ⅳ. SCDのやり方 1. 以下のコマンドを実行する 2. 実行ファイルが作成される その他 参考 Ⅰ. はじめに この記事の内…

C#でプロセスのスレッド一時停止させる

C#

Ⅰ. はじめに プロセスのサスペンド、リジュームを拡張メソッドにして使いやすくしたクラスを紹介します。 コピペで動きます。 Ⅱ. プログラム Program.cs var process = Process.GetProcessesByName("notepad").FirstOrDefault(); process.Threads.Suspend();…

C#(EXE)からC++(DLL)の関数を呼び出す方法

Ⅰ. はじめに Ⅱ. 関数をエクスポートする方法(P/Invoke) 1. サンプルプログラム 2. 実行結果 3. DllImportの呼出規約について Ⅲ. C++/CLIを利用する方法 1. サンプルプログラム 2. 実行結果 Ⅰ. はじめに C#(EXE)からC++(DLL)の関数を呼び出す方法です。方法…

C#でPublic Key Pinningする

C#

Ⅰ. はじめに Public Key Pinningとは、SSL証明書のチェックを行うことです。 チェックを行うことで、不正な証明書を検知することができます。例えばクラッカーはMITMを利用して傍受を試みます。 MITMを利用するとSSL証明書が書き換わる為、 不正な証明書であ…

C# WPF 数値のみ入力できるTextBoxを作る

C#

Ⅰ. はじめに 半角数値0~9のみを許可するTextBoxの作り方です。 数値のみ入力可能なTextBoxは標準機能として用意されていません。(2017/02/20時点) 入力値が数値かどうかを判定するコードを書く必要があります。 Ⅱ. 作り方 1. MainWindow.xaml

C# で RSA暗号鍵(.pem)作成する

Ⅰ. はじめに C#でpemファイルを作成する方法です。その逆の、 「C#でpemファイルを読み込む方法」はy_yoda様がQiitaに投稿している記事の通りです。 http://qiita.com/y_yoda/items/f4bd3ec56ac7591c5804 Ⅱ. 環境 C# .NET Core 1.1.0 Ⅲ. ソースコード NuGet…

C#でRSS 1.0のFeedを読む

C#

Ⅰ. はじめに .NET Framework 3.5以降であれば Atom 1.0 と RSS 2.0を対象にした SyndicationFeed があるのですが、RSS 1.0はサポートされていません。 RSS 1.0 を手書きで解析するときのメモです。 Ⅱ. プログラム 解析対象のXML(GIGAZINEのRSS1.0のFeedを利…

C# でBouncyCastleを使ってRijndael 鍵長256bit, ブロック長256bitで暗号化する

C#

Ⅰ. はじめに .NET Core標準のRijndael実装は鍵長256bit、ブロック長256bitがサポートされていません。 鍵長256bit、ブロック長 256bit のRijndael を利用したい場合は、それなりに利用数が多いBouncyCastleを利用するのがベターかと思います。 Ⅱ. やり方 1. …

C# SHA1を計算させる

C#

private string CalculateSHA1(string str) { using (var sha1 = SHA1.Create()) { var bs = sha1.ComputeHash(new UTF8Encoding().GetBytes(str)); return BitConverter.ToString(bs).ToLower().Replace("-", ""); } }

.NET Core HttpClientでproxyを利用する

Ⅰ. はじめに .NET CoreではWebProxyクラスは存在しません。 代わりにIWebProxyを継承して自分でクラスを作る必要があります。※2017/05/30 追記 .NET Core 2.0 でWebProxyクラスが追加されました。 Ⅱ. サンプル class MyWebProxy : IWebProxy { public ICrede…

.NET Core AESで暗号化、複合する

Ⅰ. はじめに Aesクラスを利用します。.NET Core で IV 256bit を使う方法はこちら。 http://kagasu.hatenablog.com/entry/2017/01/04/213533 Ⅱ. Aesを利用した複合の例 public byte[] DecryptRijndael(byte[] bytes) { Aes aes = Aes.Create(); aes.Padding …

.NET Coreのコンソールで日本語が文字化けする

問題点 対策 1. NuGetから System.Text.Encoding.CodePages をインストールする Install-Package System.Text.Encoding.CodePages 2. 以下の一行を追加 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 結果 参考文献 https://opcdiary.net…

C#でCRC32を計算する

C#

Ⅰ. はじめに C#でCRC32を計算するクラスを作成しました。 ホントはSystem.Security.Cryptography.HashAlgorithmを実装するのが筋です。 いつか実装して記事を修正します(そのうちやります…) Ⅱ. 使い方 バイト配列のCRC32を計算する byte[] bytes = new byt…

C# GZipで圧縮、展開する

C#

Ⅰ. はじめに RFC 1952で定義されているGZipの圧縮と展開方法です。 マジックナンバーは「1F 8B」です。 Ⅱ. やり方 1. GZipで圧縮する public static byte[] GZipCompress(byte[] bytes) { using (var ms = new MemoryStream()) { using (var gzipStream = ne…