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

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

ただいまの
回答率

90.47%

  • PHP

    20838questions

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

  • FuelPHP

    525questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,273

gzrita

score 213

前提・実現したいこと

はじめまして。

私は今、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
return array (
  'crypto_key' => 'hogehogehogehoge',
  'crypto_iv' => 'hogehogehogehoge',
  'crypto_hmac' => 'hogehogehogehoge',
);

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

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

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

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

質問したい内容

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/09 16:36 編集

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

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

    もし他に気が付かれた点があれば、ご回答頂けますと助かります。

    キャンセル

  • 2016/05/09 17:04 編集

    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だけ違う結果になりました。

    キャンセル

  • 2016/05/09 17:20

    続けてのご回答ありがとうございます。

    FuelPHPのバージョンですが、確認したところ

    サイト1:1.7.2
    サイト2:1.7.3

    を使用していました。
    両方共1.7.2を使用しているつもりだったのですが、大変失礼致しました。

    大きな変更があったのは1.8との事で原因とは異なるかもしれませんが、
    どちらかに統一してもう一度試してみます。

    確認できるまで少し時間が空くかもしれません。
    もし他に気になる点があれば、改めてご指摘頂けますと幸いです。

    キャンセル

  • 2016/05/09 17:31

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

    キャンセル

  • 2016/05/09 17: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だった事もあり見逃していたのですが、
    大変初歩的なミスに皆さんを巻き込んでしまい大変失礼いたしました。

    本当に助かりました。ありがとうございました。

    キャンセル

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/09 11:44

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

    念のため確認を行ったのですが、指定は恐らく間違えていない様でした。
    ちなみに今は、A-Z,a-z,0-9のみで構成された80文字の文字列を指定しています。
    今回は記号は混ぜておりません。

    恐れ入りますが、もし他にお気づきの点があればご回答頂けますと幸いです。

    キャンセル

  • 2016/05/09 11:57

    横から失礼します。

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

    キャンセル

  • 2016/05/09 12:04

    gzrita様

    以下も問題ない、という認識でよろしいでしょうか?
    > ・base64デコード可能な文字列

    「エンコード可能」ではなく「デコード可能」であることに注意してください。
    つまり、ある文字列をbase64エンコードした結果、得られた文字列を使用しているか?ということになります。

    tonarino210様

    補足ありがとうございます。
    > その設定が本当に使用されているかどうかを確認してみて下さい。

    確かに、これも確認する必要がありますね。

    キャンセル

  • 2016/05/09 13:23 編集

    tonarino210様

    ご回答ありがとうございます。
    確認してみましたが、どちらのサイト共修正前後で値は変わっていました。
    恐らく、設定自体は使用されているものと思います。

    KiyoshiMotoki様

    引き続きありがとうございます。

    これまでサイト1にて動作していた値の為、恐らく問題ないとは思います。
    ただ念のため、以下のサイトを用いてエンコードを行った値に修正しました。
    http://hogehoge.tk/tool/
    (変換ルールに プレーンTEXT→変換不要→未指定→BASE64 を設定して変換しました)

    しかし、申し訳ないのですが、状況は変わりませんでした。

    ただ、1つ気がついた点がありました。
    値を変更すると、`crypto_key`を直接指定している筈の`$hoge = Crypt::encode($hoge,'hogehogehogehoge');`の結果も変わっている様です。
    内部的に使用しているか、他の2つの値が関わっているのでしょうか。

    もしお気づきになられた点があれば、引き続きお付き合い頂けますと幸いです。

    キャンセル

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20838questions

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

  • FuelPHP

    525questions

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