🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

1128閲覧

C# Laravel5.8と連携 パスワード ハッシュ認証

AMK

総合スコア765

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/09/26 12:27

編集2019/09/27 10:40

C#でログイン認証をWeb上のMysqlからユーザーIDとPWを比較して
認証するようプログラムを作りました。

とりあえず、動くようにはなったのですが
現段階ではパスワードが平文なので、流石にマズイのでハッシュ化をしたいと思っております。

WEB側はLaravel5.7でユーザーの作成などの管理画面を作成しております。

Laravel5.7でユーザーを作るとパスワードがハッシュ化されるので

C#で作ったログイン認証画面よりハッシュ化されたパスワードを認証させたいのですが
どのようにすればよいのか?行き詰ってしまいました。

どうすれば認証させられますか??

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alg

2019/09/26 12:45

ご提示のコードの、どの部分にどのような問題がありますか?明記していただけると、回答する際に分かりやすいです。
AMK

2019/09/26 12:49

コードに問題は無いです このコードからLaravel5.7で生成されるパスワードのハッシュ値とC#で入力されたパスワードをハッシュ化 したときに同じようになる方法が知りたいです。
alg

2019/09/26 12:52

ん? 今のコードではやりたいことが実現できていないのですよね?でしたらご提示のコードには何か解決すべき「問題」があるのでは?
AMK

2019/09/26 13:00

認証先がLaravel5.7でパスワード生成していまして C#からパスワードを入力したときに、ハッシュ化されたパスワードをどうしたら認証させられるのか?が知りたいです。 現状のコードは平文だと認証します。
alg

2019/09/26 13:08

ちょっと私の伝え方が良くなかったようで、あまり意図が伝わっていないようですね。 「コードの何行目の○○という部分に××という問題がある」というような説明にしていただきたい、ということです。 例: 46行目の `+ "' and password LIKE '" + Login_pw.Text + "'"` の部分で、`Login_pw.Text` には画面から入力されたパスワードが平文で入っています。これで一応認証はできるのですが、平文パスワードを含んだSQLを投げるのは避けたいので、Login_pw.Text のハッシュ(Laravel5.7で生成するハッシュと同じ値)をどうにかして取得したいです。
AMK

2019/09/26 13:11

スミマセン、まさにその通りです 修正します
alg

2019/09/26 13:19

:)
Zuishin

2019/09/26 13:35 編集

徳丸先生を呼ぶためにセキュリティタグをつけておいた方がいいと思います。C# の問題ではなく、データベースの中にパスワードを保存しているのがまずいですね。https を使っているなら暗号化されているので、生のパスワードを通信するのは特に問題ないと私は思いますが、パスワードの通信回数を減らすためにアクセストークンを使ってセキュリティを高める方法もよく知られています。 それと、SQL を構築するのに文字列の連結を使っているのもよくありません。
AMK

2019/09/26 13:39

返答ありがとうございます。 Laravelでユーザーの管理をしたいので、デフォルトでパスワードがハッシュ化されてしまうんです^^; Laravelでパスワードをハッシュ化させないで保存する方法もあると思いますが 勉強も兼ねてハッシュで認証する方法を知りたいと思い質問させていただきました。
AMK

2019/09/26 14:37

BCrypt.Net を実装してみましたがダメっぽかったです
Zuishin

2019/09/26 14:47

では無理なのでは?
hihijiji

2019/09/27 02:23

認証用のWebサービスをPHPで書けばいいんじゃないの?
mikkame

2019/09/27 03:56 編集

> BCrypt.Net これの使い方がおかしいのでは。 bcryptの場合、同じパスワードを使っても同じハッシュは生成されません。MD5やSHA系とは違います。 Bcryptの場合は入力されたIDと同じIDのレコードを取得してから 該当のレコードにあるパスワードと入力されたパスワードをBcryptのVerifyで検証する。という手順になりますが 本記事中のやつは自前でハッシュしてからSQLで一致する行を取得となっています
guest

回答2

0

php と C# の BCrypt の挙動を確認してみました。

php

1<?php 2echo password_hash('test', PASSWORD_BCRYPT); 3//$2y$10$N82Wy3pdfynU5AHRjWjHheCJsv2xCbFTj1NFAy9/WCWJLhmkMjiF2

C#

1using System; 2 3public class Program 4{ 5 public static void Main() 6 { 7 // Password was "test" 8 var hash = "$2y$10$N82Wy3pdfynU5AHRjWjHheCJsv2xCbFTj1NFAy9/WCWJLhmkMjiF2"; 9 var didMatch = BCrypt.Net.BCrypt.Verify("test", hash); 10 Console.WriteLine("Password matched? {0}", didMatch); 11 } 12} 13//Password matched? True

C# の検証では $2y$ に対応している packege が必要です。
検証には、BCrypt.Net-Next を使用しました。

生成されるパスワードのハッシュ値とC#で入力されたパスワードをハッシュ化

したときに同じようになる方法が知りたいです。

上記の方法で password の検証はできませんが、回答の方法であれば実装できそうです。
参考まで。

投稿2019/09/27 19:29

編集2019/09/27 19:41
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

C#とPHPの互換があるかどうかは検証していないのですが、このように記事が見つかります。
https://www.websec-room.com/2019/02/10/3090#4

とはいえ、C#からPHPスクリプトを実行してPHP側でパスワードの検証をする方が実装は楽でしょう。

投稿2019/09/27 04:08

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AMK

2019/09/27 10:39

回答ありがとうございます。 PHPとC#で同じpasswordをBCryptで変換してみたところ 違う値が出たので、DB直接比較は諦めてcheckするphpを作る方向で考え直してみます ありがとうございました。
退会済みユーザー

退会済みユーザー

2019/09/27 10:47

salt とストレッチング考慮しました?
AMK

2019/09/27 11:00

自分でもコード作って確認しましたが この方法で作成してハッシュが違っていました。 https://www.websec-room.com/2019/02/10/3090#5 saltとかストレッチングは理解できてないです。デフォルト設定のまま実行しました。
退会済みユーザー

退会済みユーザー

2019/09/27 11:05

あーちゃんと質問見てませんでした。 salt とストレッチングを検索してみてください。 質問の方法での認証は無理です。
AMK

2019/09/27 11:05

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問