備忘録

備忘録

C#

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

C#

Ⅰ. はじめに タイトルの通り「16進数文字列をbyte[]に変換する方法」です。 処理速度は考慮してません。 LINQ 拡張メソッドの Chunksについては参考に書いてあるブログのコードをそのまま利用しています。 Ⅱ. 16進数文字列→byte[] "0x000102030405" byte[] b…

C# で Redis を使う

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

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

C#

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

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

C#

Ⅰ. はじめに タイトルの通り「C#でHttpClientにSOCKS プロクシを利用する方法」です。 SocksSharp を利用します。 SocksSharp は SOCKS4/4a/5 に対応しています。(2017/08/26時点) Ⅱ. やり方 1. NuGetから SocksSharp をインストールする Install-Package …

C# 7.1 非同期Mainを使う

C#

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

C# Zlibで圧縮、展開する

C#

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

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

C#

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

C#でDiscord BOTを作る

Ⅰ. はじめに kagasu.hatenablog.comこちらの記事でプログラミング不要なBOTの作成方法を書きましたが、 細かい動きをするBOTを作るにはコード書く必要があります。この記事ではC#でecho botのサンプルを紹介します。 Ⅱ. 環境 Windows 10 64bit 1703 Visual S…

.NET CoreでSystem.Drawingを使う

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

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

C#

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

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#で bzip2 の圧縮、展開を行う方法」です。 Ⅱ. SharpZipLib をインストールする SharpZipLib というライブラリを使います。 1. NuGet から SharpZipLib で検索し、インストールする。 ※.NET Standard 版もありますが、作成者の…

WebSocket4Net C# .NET Standard対応 WebSocket ライブラリ

Ⅰ. はじめに WebSocket4Net は2017/05/11 時点でベータ段階ですが .NET Standard 対応の WebSocket ライブラリです。 Ⅱ. 使い方 1. 「プレリリースを含める」にチェックを入れる 2017/05/11 時点で .NET Standard 対応版がベータ段階なのでチェックを入れま…

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

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

C# で Mailgun や SendGrid などを使ってメールを送信する

C#

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

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

Ⅰ. はじめに .NET Core のプロジェクトで .exe を作成する方法です。 .NET Core のプロジェクトのデプロイ方法は2通りあります。 # デプロイ方法の名称 略称 実行方法 1 Framework-dependent deployments FDD コマンドで dotnet run として実行する 2 Self-c…

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

C#

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

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

Ⅰ. はじめに C#からC++(DLL)の関数を呼び出す方法です。 いわゆる P/Invoke です。Win32 API の P/Invoke はこのサイトを利用してコピペしたほうが早いです。 http://www.pinvoke.net/ Ⅱ. サンプル dllexport.def EXPORTS GetInt GetIntArray GetString GetS…

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 で暗号化する

C#

Ⅰ. はじめに 現時点の.NET Core(1.0.3)には Rijndael に関するクラスは含まれていません。 ブロック長が 256bit 以外 かつ PaddingModeにISO10126を使用しないのであれば Aes クラスを利用すればokです。※詳細ブロック長が 256bit のRijndael を利用したい場…

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クラスは存在しません。 ※.NET Core 2.0 で追加されました。 代わりにIWebProxyを継承して自分でクラスを作る必要があります。 Ⅱ. サンプル class MyWebProxy : IWebProxy { public ICredentials Credentials { get; set; …

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

Ⅰ. はじめに .NET CoreではRijndaelManagedやAesCryptoServiceProviderクラスが使えません。 ※2017 Q1の終わりごろに追加されるようです。詳しくは※1 代わりにAesクラスを利用します。Aesクラスではブロック長が可変ですが、 ブロック長 256bit はサポートさ…

.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#

1. GZipで圧縮する public static byte[] GZipCompress(byte[] bytes) { using (MemoryStream ms = new MemoryStream()) { using (GZipStream compsrsm = new GZipStream(ms, CompressionLevel.Fastest)) { compsrsm.Write(bytes, 0, bytes.Length); } retur…

C# で ImageProcessorを使う

C#

http://imageprocessor.org/ https://github.com/JimBobSquarePants/ImageProcessor Ⅰ. はじめに ImageProcessorは画像処理ライブラリです。現時点で、2値化処理、エッジ検出、色反転、縮小、拡大、切り取り、等様々なフィルタ処理に対応しています。 Ⅱ. イ…