マンガでよめる痔のこと・薬のこと

VB.NET(VS2010)で開発しています。
パスワードを暗号化して保存したいのですがいまいち方法が
わかりません。
当たり前ですがパスワードは任意で変更可能です。
それを暗号化して保存、そして次回からは変更されたパスワードを使ってDBへログイン。
暗号化したもの単体で複号出来ないと困ります。

なるべくiniファイルではなくVS2010やVS2008の機能(リソース?)で実装したいです。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>もしDBのパスワードそのものを暗号化したものにしてしまえばいいと言う


>事ならば結局暗号化した文字列を知っていれば誰でもログオン出来てしまいませんか?
具体的にはどうやってログオン出来ると言っていますか?

画面から暗号化した文字列を入力しても、その文字列をもとに暗号化する処理が
入るからそのままでは無理だと思いますが?

この回答への補足

ということはやっぱり復号化(というか普通にパスワードを入力するイメージ)
しておかなければなりませんね。

こちらの状況を説明しますと、
運用サイドの管理者だけがID・パスワードの設定が出来る。(アプリケーションに登録出来る)
運用サイドの運用者はID・パスワードの設定を意識することなく管理者が設定した情報によって
ログオンできる。
なのでアプリケーション側にパスワードを保存しておく必要がある。
パスワードは暗号化しないまま保存しておくことは出来ない。(あたりまえ)
そのパスワードはデータベースへのログオン用のパスワードだ。
だからアプリケーション側で復号化出来ないとログオンできない。

ご理解頂けたでしょうか?

補足日時:2011/12/27 00:07
    • good
    • 0

> このDBにログオンするためのパスワードを暗号化したいのです。


> なので複合できないとまずいんです。

だから複合化の必要性がないんじゃないの? って話です。
一方通行の暗号化だけできて、元のプレーンテキストに戻す必要あるの?

暗号化だけを行う関数を作っておく。
ユーザーがログオンするときに入力したプレーンテキストを関数で暗号化する。
この暗号化された文字列と、すでに暗号化されて DB に保存されている文字列とを比較すればいいんじゃないの?
利用者が決めた利用者のためだけのパスワードをシステムや開発者やシステム管理者が解読できちゃっていいんですか?

それとも既に誰かのパスワードが暗号化されて保存されていて、それをハッキングしたいってことでしょうか?

で、たぶん話の本流である 「VB.net で文字列を暗号化する方法」 ですが、すでに検索してるかとは思いますが、「VB.NET 暗号化」 でたくさんでてきます。
ついでに 「VB.NET 暗号化 復号化」 でハッキングできるツールの作り方もわかりますね。

この回答への補足

「すでに暗号化されて DB に保存されている文字列」とはログオンした後で参照できるのでは?
ログオンした後ではなくてログオン時のとこです。

もしDBのパスワードそのものを暗号化したものにしてしまえばいいと言う
事ならば結局暗号化した文字列を知っていれば誰でもログオン出来てしまいませんか?

補足日時:2011/12/24 10:09
    • good
    • 0

AES とか、DES という話?

この回答への補足

回答ありがとうございます。

temtecomai2さんにも言いましたがその暗号単体で複合できる
暗号化のやりかたです。

補足日時:2011/12/23 00:14
    • good
    • 0

ふつうは複合化する必要ないでしょ?


システムの機能として、パスワードを忘れたユーザーに 「あなたのパスワードは○○ですよ」 って教える必要があるのなら必要かもしれないけど。

<通常のログオン>
1. 自分で決めたパスワード文字列をユーザーがシステムに入力
2. 入力された文字列をシステムが暗号化 → (a)
3. DB に保存されている暗号化済み文字列と (a) を比較

<パスワード変更→保存>
1. 自分で決めたパスワード文字列をユーザーがシステムに入力
2. 入力された文字列をシステムが暗号化して保存
※ ユーザーは自分で決めたパスワード文字列を知っているが、システムによって暗号化された文字列がなんなのかは知らない。

この回答への補足

回答ありがとうございます。

3. DB に保存されている暗号化済み文字列と (a) を比較

このDBにログオンするためのパスワードを暗号化したいのです。
なので複合できないとまずいんです。

補足日時:2011/12/23 00:09
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB.NETのテキストボックスの書式指定

VB.NETで開発練習中です。

フォームへ呼び出したデーターを、数値データであれば
カンマ区切りとか、小数点以下の桁数を指定するのは
どうしたらできるのでしょうか?
ソースのACCESSのテーブルには指定してあっても、
呼び出したデータには当然反映されませんよね。
初歩的ですがどなたか教えてください。
よろしくお願いします。

Aベストアンサー

No.3です。

私のレスは間違いでした。

FormのLoadイベントでテキストボックスに値を入れているのですね?

であれば、TextBoxのTextChangedイベントが発生します。このイベントで処理をします。

テキストボックスが多数あるのであれば、コントロール配列を使って処理をすればいいでしょう。

Q.NETアプリでパスワード等入力値を保存

.NETのWindowsフォームアプリ等で、入力フィールドの入力値を保存しておき、アプリを再度起動した際に自動セットしたいと思っています。値を保存しておく方法としては、一時フォルダ等にファイルを作って書いておけば実現は簡単とは思ったのですが、パスワード情報のような他人に見られたくない情報も保存したいと考えています。ファイルに書くデータを暗号化することも考えましたが、もしアプリをReflector等でリバースしたら暗号化キーがわかってしまうので安全ではないとも考えました。

.NETアプリでデータを安全に保管かつ復元する方法として何かいい方法はありますでしょうか?

Aベストアンサー

System.Cryptography.ProtectedData.Protectメソッドの利用が推奨されています。
http://msdn.microsoft.com/ja-jp/library/ms229741.aspx
http://msdn.microsoft.com/ja-jp/library/system.security.cryptography.protecteddata.protect.aspx
ここで使われているDPAPI自体は,IEなどでも使われている物になります。

ただ,現実的にはこれを使ってもoptionalEntropyさえ分かればアクセスできてしまいますが……。

ローカルプログラムは逆コンパイルして解析してしまえば丸裸,というのは昔から変わっていません。
どこかで割り切った一線は必要になると思います。

Q小数点を含む数値かどうか判断の判断方法

プログラム(VB.NET)初心者です。
どうぞよろしくお願いします。

テキストボックスに小数点を含んだ数値かどうかの
判断を行いたいのですが、どのようにチェックをすればいいかがわかりません。
どなたか、わかる方教えていただけたら幸いです。
サンプルソースがあると嬉しいです。
申し訳ありませんが、宜しくお願いします。

Aベストアンサー

TextBox1に入力された文字列をDecimalに変換してみて、エラーが起こるかどうかでチェックするサンプル
TextBox2にチェック結果を表示するようにしてあるが、
Flagが0以外の時エラーがあったことがわかる
------------------------------------------------------
Dim decimalVal As Decimal = 0
Dim Flag As Integer = 0

TextBox2.Text = "OK"
Try
decimalVal = System.Convert.ToDecimal(TextBox1.Text)
Catch exception As System.OverflowException
Flag = 1 'オーバーフロー
TextBox2.Text = "オーバーフロー"
Catch exception As System.FormatException
Flag = 2 '書式がおかしい
TextBox2.Text = "書式がおかしい"
Catch exception As System.ArgumentException
Flag = 3 'Null
TextBox2.Text = "未入力"
End Try

TextBox1に入力された文字列をDecimalに変換してみて、エラーが起こるかどうかでチェックするサンプル
TextBox2にチェック結果を表示するようにしてあるが、
Flagが0以外の時エラーがあったことがわかる
------------------------------------------------------
Dim decimalVal As Decimal = 0
Dim Flag As Integer = 0

TextBox2.Text = "OK"
Try
decimalVal = System.Convert.ToDecimal(TextBox1.Text)
Catch exception As System.OverflowException
Flag = 1 'オーバーフロー
TextB...続きを読む

Q他のユーザのログインパスワード取得/変更について

いつもお世話になっております。
今回ご質問させていただく内容は、[他のユーザのログインパスワード取得/変更]について実現可能かご教授いただきたいと思います。
実現可能な場合、参考HPや使用するWin32API等ご教授いただけたら幸いです。
※実際に作成できても絶対に悪用しない事を誓います。
 また、この質問に回答下さった方を裏切らない為に閲覧した方も悪用しないで頂きたいと思います。
環境:VB6.0 WindowsXP Professional
【 実現方法(手順) 】
(1):ログインするユーザ名:tarou パスワード:hanako
(2):パスワード取得/変更を変更したいユーザ名:ichirou パスワード:jirou
(3):(1)(2)共に管理者権限を保有しています。
(4):ユーザ名:tarouでWindowsXP Professionalへログインします。
(5):VB6.0で作成したプログラムを実行し、ユーザ名:ichirouの現在設定されているパスワードを取得します。
(6):ユーザ名:ichirouのパスワードを変更(saburou)し新たに設定します。
上記のようなパスワード取得/変更がセキュリティーの厳しいWindowsXP Professionalに対し、VB6.0で実現可能かご教授願います。
また、VB以外での実装方法を知っている方が居ましたら合わせてご教授願います。
宜しくお願い致します。

いつもお世話になっております。
今回ご質問させていただく内容は、[他のユーザのログインパスワード取得/変更]について実現可能かご教授いただきたいと思います。
実現可能な場合、参考HPや使用するWin32API等ご教授いただけたら幸いです。
※実際に作成できても絶対に悪用しない事を誓います。
 また、この質問に回答下さった方を裏切らない為に閲覧した方も悪用しないで頂きたいと思います。
環境:VB6.0 WindowsXP Professional
【 実現方法(手順) 】
(1):ログインするユーザ名:tarou パス...続きを読む

Aベストアンサー

> Set objUser = GetObject("WinNT://./kenmyer")
> objUser.SetPassword("i5A2sj*!")
上記のコードをWindows XP Proで試してみましたが、指定されたパスワードに変更されたように見えますが・・・

> 実行してみましたが、どうしても上手く動作しませんでした。
どういう風に「上手く動作しません」 のでしょうか?
#エラー発生?変更したパスワードでログインできない?ログイン後ファイルが見えない?

> このコマンドはwindowsNTでのコマンドみたいですので

あれ? 「WindowsNT以降で採用されたログイン管理方式」に対するコマンドなのでは?

#XPも同じ管理方式を利用しているので、使用できるのだと思ったんですが・・・

QVB.netでの暗号化復合化の鍵管理について

Windows 7 Pro (64bit)
VB.net 2010 Pro
にてアプリ開発、暗号化複合化処理を実装しているところです。

作成するものは下記で、どちらもVB.netです。
 1.暗号化ツール(自作
 2.アプリ(自作

暗号化複合化処理は下記サイトを参考に行いました。
http://dobon.net/vb/dotnet/string/encryptfile.html

システムの流れ
◆暗号化ツールについて
 1.のツールで行います。
 あるファイルを対象に暗号化し、そして、その暗号化されたファイルを出力し
 2.のアプリに埋め込もうと考えています。
 同時に、復号に使用する鍵(以下、「復号鍵」)もファイル出力します。

◆復号化について
 2.のアプリで行います。つまり暗号化と復号化の処理は1.2.で切り離されています。
 ファイル内容を復号化(復号化された内容は文字列)し、
 システム内部でそのファイル内容を使用したい。

◆問題
 復号化するからには、暗号化された復号鍵がどこかに添えてあげる必要があります。
 【復号鍵の管理】に関して、どこに持つのがセキュリティ上最も安全か考えております。
 
 折角暗号化したのにもかかわらず、復号鍵が目の見える場所にあっては、
 アプリを解析などされた際などに、意味のないものになってしまいます。 

 何か良い策などあれば、参考にお聞かせ願えればと考えております。 
 
◆没案
 下記の例では、コンピュータに長けている人であれば解析できそうな気がしたので
 今回、私の作るシステムではアウトと考えています。

 ・レジストリに格納 
  ・・・ レジストリエディタを使える人からすれば意味がない?
 
 ・Windows上のローカル奥深くに隠しファイルとして保存 
  ・・・ そもそもディスクドライブにファイル保存すること自体がアウト?
 
 ・USBなどの外部メディアに保存。システムを起動するときに指してもらう。
  ・・・ 外部メディアの管理が必要になる。紛失時の問題にもなる。アウト。

 ・サーバ上に、キーを持つ。
  ・・・ この方法だと、そのサーバ情報もアプリに持つことになるので結局、そのサーバ情報も暗号化することに→イタチごっこに?アウト。

いろいろ考えて見てはいるのですが、いまいちピンときません。
そもそも解析されたら、などと考えるまでもなくこうすれば
鍵管理は問題ないという過去の事例などありましたら、ご教授願います。

よろしくお願いいたします。

Windows 7 Pro (64bit)
VB.net 2010 Pro
にてアプリ開発、暗号化複合化処理を実装しているところです。

作成するものは下記で、どちらもVB.netです。
 1.暗号化ツール(自作
 2.アプリ(自作

暗号化複合化処理は下記サイトを参考に行いました。
http://dobon.net/vb/dotnet/string/encryptfile.html

システムの流れ
◆暗号化ツールについて
 1.のツールで行います。
 あるファイルを対象に暗号化し、そして、その暗号化されたファイルを出力し
 2.のアプリに埋め込もうと考えています。
 同時に、...続きを読む

Aベストアンサー

以下は、私が作ったアプリのライセンス提供方法です。

1.ライセンスの内容を電子署名した上で、簡単な暗号化を行います。
2.アプリはファイルを複合化し、電子署名を確認した上で、ライセンスを取り込みます。

アプリの中に、「複合化の鍵」と「電子署名確認用の公開鍵」が「小細工」して入ってます。
仮にアプリを解析され、復号鍵を解読されたとしても、電子署名までは偽造できないです。
(秘密鍵はアプリの中に入ってないので)
一応、アプリが起動したときに公開鍵やその他の改竄がされていないかセルフチェックを実施しています。

まぁ、100% 絶対に大丈夫、安全ってワケでは無いですけど・・・。
アプリをすべて解析しなきゃムリだし、そこまで解析できるならライセンスの偽造するより 自分でアプリを作るだろうって思ってます。
なので、こんな方法を取ってます。

参考になりましたか。

QVB.net XMLの作成方法 Iniの代替

VB.net 2010でプログラムを作成しており、そのパラメーター入力にIniFileを使用しました。
その作成の途中で、VB.netではIniFileではなくXMLが推奨されている様な事を読みました。

プログラムが完成したので、XMLもいじってみようと思い、簡単なパラメーターの読み書きは出来る様に成りましたが、その過程で、DOM が簡単だとかX Documentが良いとか色々書かれて居るのをみました。
私が使ったのはXmlSerializer/DeSeralizerですが、XMLを作成する方法で一番簡単なのは何でしょうか。
IniFileと同じ様な機能を実現させようとして居るのですが、色々試行錯誤して好みを見つける時間が無いのでどれか一つで作業を進めて行こうと思っています。

各方式で何か特徴はあるのでしょうか。
目的としては先に書いた様にIniFileの代替です。
特にSectionの削除、Keyの追加等は必須と成ります。
Serializer/DeserializerでSectiionやのKeyの追加、削除はどの様にするのかネットを検索して居る内に色々方法があるらしい事が分ったのですが、全ての方法を試して居る時間がありません。

IniFileの代替として一番使い易い方法は何でしょうか。
お分かりに成る方が居られましたら宜しくご回答下さい。
又、IniFileの代替方法のサイトがありましたらご紹介下さい。
宜しくお願い致します。

VB.net 2010でプログラムを作成しており、そのパラメーター入力にIniFileを使用しました。
その作成の途中で、VB.netではIniFileではなくXMLが推奨されている様な事を読みました。

プログラムが完成したので、XMLもいじってみようと思い、簡単なパラメーターの読み書きは出来る様に成りましたが、その過程で、DOM が簡単だとかX Documentが良いとか色々書かれて居るのをみました。
私が使ったのはXmlSerializer/DeSeralizerですが、XMLを作成する方法で一番簡単なのは何でしょうか。
IniFileと同じ様な機能を実現...続きを読む

Aベストアンサー

仕様が固まっているときに私が良く使うのは、
クラス丸ごとシリアル化
http://dobon.net/vb/dotnet/file/xmlserializer.html
自分のアプリケーションでしか使わないなら、セクション
やキーすらも面倒。使いたい形のままで保存です。
お手軽だけど、バージョンアップしてドンドン設定が
追加されていく場合は、過去のデータを引き継ぐところ
とかもコーディングが必要になってくるかも。

.configファイルはEXEのあるフォルダに置くと思うので、
読み取り専用の設定で使ってます。UAC対策が必須となって
きていますので。

INIファイルの利点の1つは、ユーザに直接編集して
もらえる可能性が高いという点だと思っています。
XMLでは「ごちゃごちゃタグが付いたら分かり難い」
って言われてINIファイルを採用した.NETのシステム
開発も経験しました。結局お金を出してくれる人が決めた
仕様次第ですし、素人の方にはタグが付いただけで敷居が
高くなるんですよね。。。そういう意味ではINIファイル
の方が優秀かもしれません。
まぁ、設定画面もフォームで作ってアプリケーションから
設定させる想定なのかもしれませんが。

仕様が固まっているときに私が良く使うのは、
クラス丸ごとシリアル化
http://dobon.net/vb/dotnet/file/xmlserializer.html
自分のアプリケーションでしか使わないなら、セクション
やキーすらも面倒。使いたい形のままで保存です。
お手軽だけど、バージョンアップしてドンドン設定が
追加されていく場合は、過去のデータを引き継ぐところ
とかもコーディングが必要になってくるかも。

.configファイルはEXEのあるフォルダに置くと思うので、
読み取り専用の設定で使ってます。UAC対策が必須となって
きていま...続きを読む


人気Q&Aランキング