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

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

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

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

2回答

5480閲覧

[FuelPHP] Crypt::encodeした時の結果がサイトによって異なってしまう

gzrita

総合スコア236

PHP

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

1グッド

0クリップ

投稿2016/05/09 02:24

編集2016/05/09 02:51

###前提・実現したいこと

はじめまして。

私は今、IDとパスワードを使ってログインを行う、
FuelPHPを用いて制作した自社用のツールを運用しています。

今回、それに加えて「同じIDとパスワード」を用いてログインを行う、
別のツールを制作する事になりました。制作には同じくFuelPHPを用いる予定です。

それぞれのツールは以下の様なURLで、
アカウント情報を保存しているデータベースは同じ物を使っています。

サイト1(既に運用中):https://sample1.sample/
サイト2(現在制作中):https://sample2.sample/

###発生している問題・エラーメッセージ

アカウントの保存を行う際、パスワードについてはCrypt::encodeを行い暗号化を試みています。
しかし、サイト1とサイト2で同じように処理しているにも関わらず結果が異なります。

その為、ログインの処理がうまくいかず、サイト1で登録していた既存のユーザーに関しては
サイト1ではログインできるが、サイト2ではログインできないという状態です。
(逆にサイト2で新規登録した場合はサイト1へログインできません)

###設定した部分、試した内容

サイト1・サイト2、それぞれのapp/config/crypt.phpへ以下の様にCryptに関する設定は行っています。
この値を揃えれば、共通のIDとパスワードでログインできると考えていました。

php

1<?php 2return array ( 3 'crypto_key' => 'hogehogehogehoge', 4 'crypto_iv' => 'hogehogehogehoge', 5 'crypto_hmac' => 'hogehogehogehoge', 6);

他の部分に問題があるのかとも思い、
以下の様な処理を試しましたがサイト1とサイト2で結果が異なります。

PHP

1$hoge = 'hogehoge' 2$hoge = Crypt::encode($hoge); 3echo $hoge;

そもそもcrypt.phpの設定がうまく行っていないのかと思い、
以下の様な処理を行っても異なる結果となりました。

PHP

1$hoge = 'hogehoge' 2$hoge = Crypt::encode($hoge,'hogehogehogehoge'); //直接crypto_keyを指定 3echo $hoge;

###質問したい内容

Crypt::encodeで同じ結果を取得したい場合、上記の方法は異なっているのでしょうか。
・あるいは、別に設定すべき点を見逃しているのでしょうか。
・もし他にこの様な実装を行えるアイデアがあれば、ご指導頂けますと幸いです。

私の力不足でお手数をおかけいたしますが、
どうぞ宜しくお願い致します。

yodel👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

開発環境と本番環境でapp/config/crypt.phpの中身が違っている可能性はないですか?
もし.gitignoreがデフォルトのままならapp/config/crypt.phpも除外されていて、
本番環境のcrypt.phpは別途コピーをしたか、もしくは自動生成されているはずです。

投稿2016/05/09 07:30

nnssn

総合スコア1221

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

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

gzrita

2016/05/09 07:36 編集

ご回答ありがとうございます。 確かに仰るとおりですが、今回使っているcrypt.phpは、サイト1からサイト2へFTP経由で直接コピーしたもので、異なるという事は無さそうです。質問での記載が足らず失礼致しました。 もし他に気が付かれた点があれば、ご回答頂けますと助かります。
nnssn

2016/05/09 08:31 編集

ver1.8(現行バージョン)でCryptクラスに何か大きな変更があったみたいですね。 (削除された行数を確認しただけですが) https://github.com/fuel/core/commit/8f4c2804d4ba36048a22d92254b337a886f6acb2 1.8、1.8、1.7.2の3環境で設定ファイルをそろえて Crypt::encode($hoge,'hogehogehogehoge');を実行したところ 1.7.2だけ違う結果になりました。
gzrita

2016/05/09 08:20

続けてのご回答ありがとうございます。 FuelPHPのバージョンですが、確認したところ サイト1:1.7.2 サイト2:1.7.3 を使用していました。 両方共1.7.2を使用しているつもりだったのですが、大変失礼致しました。 大きな変更があったのは1.8との事で原因とは異なるかもしれませんが、 どちらかに統一してもう一度試してみます。 確認できるまで少し時間が空くかもしれません。 もし他に気になる点があれば、改めてご指摘頂けますと幸いです。
nnssn

2016/05/09 08:31

わかりました。こちらも何か気づいたことがあればまたコメントさせていただきます。 それと先ほど1.7.3と書きましたが、これは1.7.2の間違いでした。 上記コメントは訂正しておきます。
gzrita

2016/05/09 08:36

お世話になっております。 サイト2のバージョンを1.7.2として試した所、問題なく動作しました。 バージョン1.7.3の更新情報に「PHPSecLib」をアップデートしたとあり、 これが出力の変わっていた原因の様です。 また、nnssnさんにならい、同じ設定でバージョン毎に出力を確認したところ、 1.8、1.7.3、1.7.2それぞれで異なる結果となる様でした。 今回1.7.3と1.7.2と、同じ1.7.xだった事もあり見逃していたのですが、 大変初歩的なミスに皆さんを巻き込んでしまい大変失礼いたしました。 本当に助かりました。ありがとうございました。
guest

0

当てずっぽうな回答で恐縮ですが、、

以下の記事が関係しているかもしれません。
http://qiita.com/takakiku/items/c6f508330070b06f8e81

crypto_key, crypto_iv, crypto_hamc の3つが必要となり、それぞれ以下の条件を満たす必要があります。そうでなければ、再作成されてしまいノード毎に異なることになってしまします。
・base64デコード可能な文字列
・文字列の長さは4の倍数

投稿2016/05/09 02:37

KiyoshiMotoki

総合スコア4791

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

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

gzrita

2016/05/09 02:44

ご回答ありがとうございます。 念のため確認を行ったのですが、指定は恐らく間違えていない様でした。 ちなみに今は、A-Z,a-z,0-9のみで構成された80文字の文字列を指定しています。 今回は記号は混ぜておりません。 恐れ入りますが、もし他にお気づきの点があればご回答頂けますと幸いです。
tonarino210

2016/05/09 02:57

横から失礼します。 その設定が本当に使用されているかどうかを確認してみて下さい。 サイト1の各設定を変更して前後の結果を見てみる。 サイト2も同様にする。 正しく設定が使用されていない場合、どちらかのサイトで「前後の結果が変わらない」となると思われます。
KiyoshiMotoki

2016/05/09 03:04

gzrita様 以下も問題ない、という認識でよろしいでしょうか? > ・base64デコード可能な文字列 「エンコード可能」ではなく「デコード可能」であることに注意してください。 つまり、ある文字列をbase64エンコードした結果、得られた文字列を使用しているか?ということになります。 tonarino210様 補足ありがとうございます。 > その設定が本当に使用されているかどうかを確認してみて下さい。 確かに、これも確認する必要がありますね。
gzrita

2016/05/09 04:26 編集

tonarino210様 ご回答ありがとうございます。 確認してみましたが、どちらのサイト共修正前後で値は変わっていました。 恐らく、設定自体は使用されているものと思います。 KiyoshiMotoki様 引き続きありがとうございます。 これまでサイト1にて動作していた値の為、恐らく問題ないとは思います。 ただ念のため、以下のサイトを用いてエンコードを行った値に修正しました。 http://hogehoge.tk/tool/ (変換ルールに プレーンTEXT→変換不要→未指定→BASE64 を設定して変換しました) しかし、申し訳ないのですが、状況は変わりませんでした。 ただ、1つ気がついた点がありました。 値を変更すると、`crypto_key`を直接指定している筈の`$hoge = Crypt::encode($hoge,'hogehogehogehoge');`の結果も変わっている様です。 内部的に使用しているか、他の2つの値が関わっているのでしょうか。 もしお気づきになられた点があれば、引き続きお付き合い頂けますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問