Ⅰ. はじめに
AWS Toolkit for Visual Studioを利用しているのが前提です。
VisualStudioに追加したプロファイルの追加、編集、削除するについて説明します。
リバースエンジニアリングのテクニックの1つです。
パターン化しているので覚えておいて損はありません。
主に ASProtect というパッカーが利用する方法です。
半角数値0~9のみを許可するTextBoxの作り方です。
数値のみ入力可能なTextBoxは標準機能として用意されていません。(2017/02/20時点)
入力値が数値かどうかを判定するコードを書く必要があります。
<TextBox x:Name="textBoxPrice" InputMethod.IsInputMethodEnabled="False" PreviewTextInput="textBoxPrice_PreviewTextInput" CommandManager.PreviewExecuted="textBoxPrice_PreviewExecuted"/>
private void textBoxPrice_PreviewTextInput(object sender, TextCompositionEventArgs e) { // 0-9のみ e.Handled = !new Regex("[0-9]").IsMatch(e.Text); } private void textBoxPrice_PreviewExecuted(object sender, ExecutedRoutedEventArgs e) { // 貼り付けを許可しない if (e.Command == ApplicationCommands.Paste) { e.Handled = true; } }
C#でpemファイルを作成する方法です。
その逆の、
「C#でpemファイルを読み込む方法」はy_yoda様がQiitaに投稿している記事の通りです。
http://qiita.com/y_yoda/items/f4bd3ec56ac7591c5804
Install-Package Portable.BouncyCastle
public class Program { public static void Main(string[] args) { var rsa = RSA.Create(); var parameter = rsa.ExportParameters(true); var privateKey = RsaPemMaker.GetPrivatePemString(parameter); File.WriteAllText("private-key.pem", privateKey); Console.WriteLine(privateKey); var publicKey = RsaPemMaker.GetPublicPemString(parameter); File.WriteAllText("public-key.pem", privateKey); Console.WriteLine(publicKey); } }
using System; using System.IO; using System.Security.Cryptography; using System.Text; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Math; public static class RsaPemMaker { public static string GetPrivatePemString(RSAParameters p) { var key = new RsaPrivateCrtKeyParameters( new BigInteger(1, p.Modulus), new BigInteger(1, p.Exponent), new BigInteger(1, p.D), new BigInteger(1, p.P), new BigInteger(1, p.Q), new BigInteger(1, p.DP), new BigInteger(1, p.DQ), new BigInteger(1, p.InverseQ)); using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream, new UTF8Encoding())) { var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(writer); pemWriter.WriteObject(key); } return new UTF8Encoding().GetString(stream.ToArray()).Replace("\r\n", "\n"); } } public static string GetPublicPemString(RSAParameters p) { var key = new RsaKeyParameters( false, new BigInteger(1, p.Modulus), new BigInteger(1, p.Exponent)); using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream, new UTF8Encoding())) { var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(writer); pemWriter.WriteObject(key); } return new UTF8Encoding().GetString(stream.ToArray()).Replace("\r\n", "\n"); } } }
.NET 5でPEMの読み書きAPIが追加されるようです。
https://github.com/dotnet/runtime/pull/32260
.NET Framework 3.5以降であれば Atom 1.0 と RSS 2.0を対象にした SyndicationFeed があるのですが、RSS 1.0はサポートされていません。
RSS 1.0 を手書きで解析するときのメモです。
解析対象のXML(GIGAZINEのRSS1.0のFeedを利用しました)
https://gist.github.com/anonymous/19883bc8c892ca8f8ceaa5937257a83e
static void Main(string[] args) { var xml = new XmlDocument(); xml.Load("http://feed.rssad.jp/rss/gigazine/rss_1.0"); var nsmgr = new XmlNamespaceManager(xml.NameTable); nsmgr.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); nsmgr.AddNamespace("rss", "http://purl.org/rss/1.0/"); nsmgr.AddNamespace("dc", "http://purl.org/dc/elements/1.1/"); foreach (XmlElement node in xml.SelectNodes("/rdf:RDF/rss:item", nsmgr)) { var title = node.SelectNodes("rss:title", nsmgr)[0].InnerText; var link = node.SelectNodes("rss:link", nsmgr)[0].InnerText; var description = node.SelectNodes("rss:description", nsmgr)[0].InnerText; var date = DateTime.Parse(node.SelectNodes("dc:date", nsmgr)[0].InnerText); Console.WriteLine("-------"); Console.WriteLine($"title: {title}"); Console.WriteLine($"link: {link}"); Console.WriteLine($"description: {description}"); Console.WriteLine($"date: {date}"); } }