質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Security+

Security+は、IT業界団体であるCompTIA認定の資格の一つです。ネットワークセキュリティやコンプライアンスと運用セキュリティといったセキュリティ分野における知識・技術の証明になり、セキュリティインシデントに対応するための知識も評価されます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

4回答

3137閲覧

異なる言語間でのパスワードの暗号・復号について

退会済みユーザー

退会済みユーザー

総合スコア0

Security+

Security+は、IT業界団体であるCompTIA認定の資格の一つです。ネットワークセキュリティやコンプライアンスと運用セキュリティといったセキュリティ分野における知識・技術の証明になり、セキュリティインシデントに対応するための知識も評価されます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/08/10 07:14

編集2016/08/10 08:08

######質問概要
ユーザ等のパスワードをDBに保存する際、一般的には暗号化して登録すると思いますが、この登録時に使用したプログラミング言語と、このパスワードを使って認証するプログラミング言語が異なる場合に簡単に実現できる方法はないかというご質問です。

######具体例
PHPで構築したWEBアプリがあり、ブラウザのフォームからユーザ登録を受け付けます。
そこで入力されたユーザのパスワードを、PHPのpassword_hash関数でハッシュ化し、ハッシュ化したパスワードをDBに登録します。

一方で、同DBに対してCRUDするWebAPIを作成します。こちらの言語がGoになります。
初回認証時に、PHPの関数でハッシュ化されたパスワードをGo(WebAPIでPOSTされたパスワード)で照合(コンペア)します。
※実際にGoのbcryptパッケージでコンペアしてみたところ上手くいかなかったので質問しています

######質問内容
上記例の場合、どうするのがベターでしょうか?

個人的には、上記を解決する方法として下記2点を考えております。
①認証処理を一本化する(PHPに一本化するならGoから認証だけPHPを呼ぶ)
②プロジェクトで共通の暗号・復号処理を各言語ごとに独自で実装する
(PHPの関数は使わず、GoとPHP共通のアルゴリズムで暗号・復号)

PHPとGOに関わらず、このようにシステムに複数言語を使われている方がいましたらどのように実現されているか知りたいです。
良い方法がありましたら是非教えてください。

よろしくお願いします。

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

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

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

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

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

guest

回答4

0

ハッシュは登録されているものと入力された文字列のハッシュが一致するかどうかに使います。
このメリットは、パスワードそのものを登録しておく必要が無いので(ハッシュだけ登録しておけばいい)セキュリティ的に安全性が高いということです。ハッシュから元の文字列を類推するのが難しいのと、違う文字列で同じハッシュになることはまずありえないというところから利用されています。

投稿2016/08/10 07:48

PineMatsu

総合スコア3579

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

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

退会済みユーザー

退会済みユーザー

2016/08/10 08:12

質問文を訂正しました。すみません記載ミスです。
guest

0

余談になりますが、認証のためにハッシュ化されたパスワードを復号する
ってのはあんまやんないんじゃないかなあ。
入力されたものをハッシュ化して、それ同士を比較するみたいな!?

投稿2016/08/10 07:36

takasima20

総合スコア7458

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

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

退会済みユーザー

退会済みユーザー

2016/08/10 08:12

質問文を訂正しました。すみません記載ミスです。
guest

0

暗号と言うのは、アルゴリズムが同じであれば基本的に結果は同じです。
暗号化する際に必要となるキーやIVも同じにする必要はありますが、こちらも言語には依存しません。

システム構築上の課題としては、認証を一本化するという解決策を取るのがメンテナンス効率的にもいいとは思いますが、システムの拡張性を損なう懸念はありますね。
ただ個人的には、いい機会ですので同じ条件で異なる言語で暗号化を行うという事に挑戦されることをお勧めします。

投稿2016/08/10 07:31

kunai

総合スコア5405

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

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

kunai

2016/08/10 07:43

質問文読み落としてましたが、hashを複合としているんですか? hashは復号を考えない一方向の暗号化ですから、復号は出来ませんよ。 言語が同じPHPでもできません。 PHPで言うならmcrypt_encrypt等を使って、復号可能な暗号化を行う必要があります。
退会済みユーザー

退会済みユーザー

2016/08/10 08:09

質問文を訂正しました。すみません記載ミスです。
kunai

2016/08/10 08:17

回答に書いていますが、暗号化を行う時には平文以外にキー等が必要になります。 password_hash()は、saltという、何も指定しなければPHPがランダムで作成する文字列をキーにして暗号化が行われます。 このsaltがGo言語と共有されていなければハッシュ値は当然異なります。 (PHP7では、password_hash()でsaltを独自指定するのは非推奨となっているようですが。)
guest

0

PHPのpassword_hash関数では(現状唯一のアルゴリズムとして)BCryptが使われていますが、これはRubyGoなどにも実装されていますので、うまくパラメーターを調整すれば言語を超えて使えると思います。

投稿2016/08/10 07:25

maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2016/08/10 08:11

パラメーターの問題なんですかね? コストぐらいしかパラメータは指定していませんが、具体的にpassword_hashでいくとどのパラメータかお分かりでしたら教えて欲しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問