WPF アプリケーションの 多言語切替

Similar documents
WPF アプリケーションの 多言語切替

WPF アプリケーションの 多言語切替

DEMO1 まずはやってみよう アクティビティをダブルクリック 作成 - プロジェクト C# => Workflow CodeActivity をぽとぺ シーケンシャルと ステートマシン それぞれのコ ンソールアプリ あとライブラリがある びっくりマークは足りていないあかし プロパティをみると判別で

グラフィックス 目次

Sparkline for WPF

基礎計算機演習 実習課題No6

Visual Studio Do-It-Yourself 第 9 回ユーザーコントロール 第 6 回のリソースから第 8 回のテンプレートで さまざまな方法でコントロールをカスタマズできるこ とを学びました 今回のテーマであるユーザーコントロールは 既存の一つのコントロールをカスタマ ズするのではな

グラフィックス 目次

XAML Do-It-Yourself シリーズ 第 1 回 XAML 概要 -1-

saihata.doc

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators

YKToolkit.Controls 取扱説明書 Ver YKSoftware

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

グラフィックス 目次

SharpShooter Reports.WPF 基本的な使い方 Last modified on: November 15, 2012 本ドキュメント内のスクリーンショットは英語表記ですが SharpShooter Reports JP( 日本語版 ) では日本語で表示されます

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

XAML Do-It-Yourself 第 3 回ベントとトリガー XML Do-It-Yourself 第 3 回目は ベント処理とトリガーについて学習します Windows フォームゕプリケーションでは たとえば ボタンが押された というベントに対応する処理 ( ベントハンドラー ) を記述する

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

XAMLDo-It-Yourself 第 2 回. レゕウト 今回は XAML でウゖンドウにパネルやボタン メニューなどの基本的なコントロールを配置する方法を 学びます ここでは 次のことを学習します XAML におけるレゕウトの基本 主要なパネルとその記述方法 XAML (WPF) で利用可能な

JavaプログラミングⅠ

オブジェクト指向プログラミング・同演習 5月21日演習課題

JavaプログラミングⅠ

Microsoft PowerPoint - ruby_instruction.ppt

第14回若年者ものづくり競技大会「業務用ITソフトウェア・ソリューションズ」職種 模擬競技課題

PowerPoint プレゼンテーション

Abstract Kinect for Windows RGB Kinect for Windows v Kinect for Windows v2

WEBシステムのセキュリティ技術

Visual Studio 2010 Ready Day ブレークアウトセッション概要

グラフィックス 目次

C#の基本2 ~プログラムの制御構造~

WPFの初歩の初歩

とても使いやすい Boost の serialization

Microsoft Word _VBAProg1.docx

C#の基本

WPF Bindingの威力

第1章 ビジュアルプログラミング入門

Prog1_6th

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

プログラミング基礎I(再)

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

intra-mart Accel Platform — 外部ソフトウェア接続モジュール 仕様書   第3版  

問題1 以下に示すプログラムは、次の処理をするプログラムである


HOW DO I WebBrowser コントロールで HTML5 を 使用するには ここでは以下の手順で説明します Video 要素を使用する Silverlight と JavaScript の間でやり取りする Canvas 要素を使用する Video 要素を使用する 1. Visual Stu

TFTP serverの実装

FMV取扱ガイド

SpringSecurity


<4D F736F F D D836A B ED28CFC82AF814593FA967B8CEA816A817A2E646F63>

Prog2_12th

マルウェアレポート 2017年12月度版

JavaプログラミングⅠ

PowerPoint プレゼンテーション

Chart3D for WPF/Silverlight

Microsoft Word - problem3.doc

Web フォームアプリケーション開発基礎

Delphi/400でFlash動画の実装

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

Prog2_15th

PowerPoint プレゼンテーション

intra-mart Accel Platform — 招待機能プログラミングガイド   初版  

ArcGIS Runtime SDK for .NET アプリケーション配布ガイド

デジタル表現論・第6回

Silverlight を使用したデータアプリケーション開発手順

Prog1_2nd

TestDesign for Web

CodeGear Developer Camp

Microsoft PowerPoint - prog03.ppt

Extended Library for UWP

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

スライド 1

Boost.Preprocessor でプログラミングしましょう DigitalGhost

WebReportCafe

問題1 以下に示すプログラムは、次の処理をするプログラムである

このルールをそのまま正規表現として書くと 下記のようになります ^A[0-9]{2}00[0-9]{3}([0-9]{2})?$ ちょっと難しく見えるかもしれませんが 下記のような対応になっています 最初 固定 年度 固定 通番 ( 枝番 ) 最後 ルール "A" 数字 2 桁 0 を 2 桁 数字

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

Prog2_4th

Microsoft Word - VB.doc

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

スライド 1

2. Docker の基本的な操作 1 docker hub の参照 2 DockerHub の Explorer リンクからアプリケーションを参照 3 アプリケーション検索 4 tag について 3. docker 基本コマンド 1 docker の

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

.NET Framework 4.0 世代の Expression Trees

Microsoft PowerPoint ppt

Prog1_3rd

SOC Report

テキストファイルの入出力1

Section1_入力用テンプレートの作成

3. ワークシート 入力データの検証 の完成 ワークシート 入力データの検証 には 入力データの検証表 があります セル範囲は セル A2 からセル G22 までで 2 行目が項目見出しとなっており A 列が入力データ B 列が点検値無し C 列が入力された点検値 D 列が分類コード E 列が製品コ

Calendar Plus JavaScript API リファレンス ラジカルブリッジ Ver

HCI プログラミング 10 回目テキストフィールドとキーイベント 今日の講義で学ぶ内容 テキストフィールドの利用 キーイベントの処理 テキストフィールドの利用 1 テキストフィールドを配置してみましょう テキストフィールドを用いることにより 数値や文字列などのデータ入力が可能になります ソースファ


書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

文字列操作と正規表現

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

JavaプログラミングⅠ

Transcription:

パスワード認証 YK S o f t w a r e 2015 年 8 月 3 日 @twyujiro15

プロフィール 加藤裕次郎 本職は製造業の開発業務 - 2009 年 4 月に入社 1982.03.03 生まれ ( うお座 ) 左利き ( お箸は右 ) twitter : @twyujiro15 プログラミング経験 Excel VBA MATLAB MATX C VC++ (Windows SDK) VC++ (MFC) WPF + C# 組み込みソフトウェア開発で初めてまともに C 言語 デバッグソフトで Visual C++(MFC Windows SDK) Excel 大好きマンだったので VBA も使用 VBA でソケット通信したときは感動した - 2013 年 10 月 あるサンプルが "WPF" なるものでできていることを知る 独自調査から @okazuki さんの MVVM 入門四則演算にたどり着く 1

今回のゴール パスワード認証できるようにする パスワードを暗号化する SecureString 型を知る 2

パスワード認証の落とし穴 ( 素人編 ) ユーザー名 パスワード 平文で入力させる 比較 データベースを参照する データベースにパスワードが平文で残る ユーザー名 パスワード 平文で入力させる 暗号化 暗号文 データベースには暗号化されたパスワードを残す 比較 暗号文 3

どんな暗号化をすればいいの? ハッシュ関数 可変長入力に対して固定長出力である 入力から出力を求めることは容易 出力から入力を求めることは計算量的に困難 出力が同一となる入力の一つを求めることも計算量的に困難 データベースにはハッシュ値を保存しておきましょう でもちょっと待って! これって本当に安全なの? よく使われる暗号化手法です 頑張れば求められてしまう 基本的にパスワードは人間が入力するもの せいぜい長くても 10 文字前後 パターンが限られてしまう パスワードになりそうな文字のハッシュ値をあらかじめ用意 総当たりで検索されてしまう 4

総当たり攻撃を想定しておく 考え方が甘い パスワード ハッシュ関数 ハッシュ値 詰めが甘い パスワード + Salt ハッシュ関数 ハッシュ値 より安全 複数のハッシュ関数パスワード + Salt ハッシュ値 Salt( ソルト ) って何? ストレッチング 機械的にランダムなデータを付加することでパスワードの推測を回避 5

SHA256 のハッシュ値を算出する /// <summary> /// Salt + パスワードのハッシュ値を算出します /// </summary> /// <param name="userid">salt に用いる ID を指定します </param> /// <param name="password"> パスワードを指定します </param> /// <returns> ハッシュ値を返します </returns> public static string GetSaltedPassword(string userid, string password) { var salt = GetSha256(userId); return GetSha256(salt + password); } /// <summary> /// 文字列から SHA256 のハッシュ値を算出します /// </summary> /// <param name="target"> 変換する文字列を指定します </param> /// <returns> ハッシュ値を返します </returns> private static string GetSha256(string target) { byte[] bytevalue = Encoding.UTF8.GetBytes(target); var sha256 = SHA256Managed.Create(); byte[] hash = sha256.computehash(bytearray); var buf = new StringBuilder(); foreach (var s in hash) { buf.appendformat("{0:x2}", s); } return buf.tostring(); } 6

複数回ハッシュでストレッチング /// <summary> /// Salt + ストレッチングしたパスワードのハッシュ値を算出します /// </summary> /// <param name="userid">salt に用いる ID を指定します </param> /// <param name="password"> パスワードを指定します </param> /// <returns> ハッシュ値を返します </returns> public static string GetStretchedPassword(string userid, string password) { var salt = GetSha256(userId); var hash = string.empty; for (var i = 0; i < StretchCount; i++) { hash = GetSha256(hash + salt + password); } return hash; } やり方はいろいろあるんだと思う 例えばこんなハッシュ値が出力されます 1e15e40501a8e2c9e58d7d8972bfb0412d471739f4e8b215362f6eb2491e4e90 よし 次は UI の実装だ 7

UI の実装 まあシンプルに PasswordBox コントロールを使いましょう <Grid FocusManager.FocusedElement="{Binding ElementName=textBox}" Margin="10"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> PasswordBox ってどうやってバインドするの? <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="User name : " /> <TextBlock Grid.Row="1" Grid.Column="0" Text="Password : " /> <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding UserName}" /> <PasswordBox Grid.Row="1" Grid.Column="1" /> <Button Grid.Row="2" Grid.Column="1" Content="Log in" Command="{Binding LogInCommand}" /> <TextBlock Text="{Binding Message}" Grid.Row="2" Grid.ColumnSpan="2" /> </Grid> 8

SecurePassword プロパティ PasswordBox.Password プロパティは依存関係プロパティではない! 依存関係プロパティにするとマネジド領域にパスワードが平文で残る マネジド領域は GC のタイミングによってメモリ解放される セキュリティ上よろしくない SecureString 型の PasswordBox.SecurePassword プロパティを使いましょう SecureString 型? string と同様に文字列を扱う型 文字列が自動的に暗号化される IDisposable インターフェースを実装 任意タイミングで破棄できる スレッドの中断などでも確実に破棄されることがランタイムで保証される でも PasswordBox.SecureString プロパティも依存関係プロパティじゃないんだけど 9

ビヘイビアでバインドできるようにする 長くなるので概略だけ説明 using System.Security; using System.Windows; using System.Windows.Controls; public class SecurePasswordBindingBehavior { IsEnabled 添付プロパティ SecurePassword 添付プロパティ このプロパティにバインドする } PasswordChanged イベントハンドラ PasswordBox コントロールに添付することが前提 IsEnabled 添付プロパティが true のときにイベントハンドラを登録 PasswordBox の PasswordChanged イベントハンドラで処理をおこなう - PasswordBox.SecurePassword を SecurePassword 添付プロパティにコピー 本当は SecureString さえも依存関係プロパティにしないほうがいいのかも このビヘイビア内で暗号化してそのデータをバインドしたほうがいいかも 10

参考 URL [1] パスワードとハッシュとユーザー認証 http://csharp.keicode.com/topics/password-hashing.php [2] 安全なパスワードの保存方法 (ASP.NET, C#, VB.NET 編 ) http://www.websec-room.com/2013/02/27/239 [3] 安全なパスワードの保存方法 http://www.websec-room.com/2013/02/27/237 [4] SecureString クラス http://smdn.jp/programming/netfx/string/6_securestring/ [5] C# + WPF で GenericPrincipal を使った認証と承認を行い 画面の表示を制限する http://thinkami.hatenablog.com/entry/2014/08/26/055052 11

ご清聴ありがとうございました S o f t w a r e