2009-05-07 5 views
0

私は、配列を文字列としてエンコードするための双方向暗号化アルゴリズムを探しています。そのため、一部のデータをCookieに安全に保存できます。アルゴリズムは配列を暗黙的に暗くするべきではありません。私はあまりにも難読化したいです。私のデータにはすべての印刷可能な文字が含まれています。配列を文字列として暗号化する

何かへのリンクで十分ですが、私はGoogle上で何かを掘り起こすことはできません。たぶん私はいくつかの不明瞭な文字で配列を暗黙にして、何とかそれを暗号化する必要がありますか?私はどのような方法でそれを暗号化するかわからない...あまりにも安全ではない、クッキーのデータはであり、それはではない。

ああ...暗号化アルゴリズムで鍵/塩を使用できるようにする必要があります。 mcrypt_encryptは乱雑な長い結果を返すようですが、おそらく私は正しい暗号を使用していません。最も簡単な暗号はどれですか(短いクリーンな文字列を生成します)?

+1

暗号化されたデータをCookieに保存しないでください。2つのWebサイト間でデータを共有する必要がある場合は、CookieにIDを格納し、他のWebサイトにユーザー名とパスワードを使用してデータを要求させる(curlを使用)。 – OIS

+0

私が保管しているのはIDとキーなので、ユーザーはそのCookieを偽造できません。私はちょうどいい対策のためにそれを難読化しているので、彼らは私が何を保存しているのか分からない。 – mpen

+0

難読化と暗号化はまったく異なります。どちらがいいですか? –

答えて

8

serialize()文字列に配列からあなたの情報を取得します(まあまあセキュリティのため) - あなたはbase64_encode()を通してそれを渡すことができ難読化したいだけなら - セキュリティは不要 -

あなたには、いくつかのセキュリティが必要な場合 - mcryptのとフグに見て:blowfish example

+0

は、serialize()、感謝について知りませんでした! – mpen

+0

これは古い質問であり、古い答えですが、これに遭遇する仲間の検索者にとっての示唆として、[PHPのOpenSSL関数](https://secure.php.net/ manual/en/ref.openssl.php)を使用してください。 OpenSSLには、多くの暗号化アルゴリズム(BlowfishとAESを含む)の組み込みサポートが組み込まれています。また、セキュリティはOPにとって大きな懸念事項ではありませんでしたが、AESは一般的にブローフィッシュよりも安全だと考えられています。 – SpencerD

1

セキュリティが問題で、配列をコード化し、ためにJSONを使用していない場合はROT13文字列;-)

+1

セキュリティが問題にならない場合、なぜ暗号化に気をつけますか? – TwentyMiles

+0

@TwentyMilesなぜなら質問は最初にそれを言いました:-) – lothar

+0

私は他のセキュリティ対策も取っているので、大きな懸念はありません。さらに、私は自分のウェブサイトに機密情報を保管していません...実際、私はuser_id以上のものを保管していません。 – mpen

0

てみ配列文字列の結果の文字を保管内のすべての要素をXOR-INGの - 反対に解読する。

0

安全である必要がない場合は、plain base64またはrot13のいずれかを調べる価値があります。

2

私はフグを使用して、その後encryptを内破したいか、DESまたは何か...

+0

アレイをImplodeしますか?説明またはリンク? ( "abc"、array( '1'、 '2'、 '3')); – JPhi1618

+0

@ JPhi1618 http://ca3.php.net/manual/en/function.implode.php – mpen

+0

$ str = implode ); // $ str => "1abc2abc3" – Ickmund

4

使用serialize()文字列とアンシリアライズ(に配列を変換するために)戻って配列にそれを回すために。これは、黙示および手動解析と比べてはるかに優れています。単純な難読化(プログラマーが見ることができる)のために単純なbase64エンコーディングを使うことができますが、実質的なセキュリティを提供するためにはmcryptライブラリを実際に調べる必要があります。

おそらく最も良いことは、配列をクッキーにまったく格納しないことでしょう。代わりにセッション変数に配列を格納し、すべてのユーザがセッションIDであることを確認します。もちろん、これは、セッションの期間だけ配列が必要な場合にのみ機能します。

あなたのコメントでは、これは「私を覚えてください」というクッキーのためだと言います。これは認証に関するものです。その場合は、配列に機密情報を格納しないでください。代わりに塩漬けされたハッシュを保存し、それを使用してください。たとえば、あなたのクッキーには、ユーザー名と(データベースパスワードハッシュ+ IPアドレス範囲)のソルトハッシュを含めることができます。ユーザーがサイトにアクセスしたら、Cookieを読み取り、データベース内の情報からハッシュを構築します。 Cookie内のハッシュと一致する場合は、自動的にログインします。そうでない場合は、クッキーを削除し、存在しなかったふりをします。

このようにして、機密データはCookieに保存されず、暗号化する必要はありません。

+0

私は '私を覚えている'クッキーのためにそれを使用しています。 – mpen

6

gnarfの回答に基づいて、これはトリックを行う必要があります。

function encode_arr($data) { 
    return base64_encode(serialize($data)); 
} 

function decode_arr($data) { 
    return unserialize(base64_decode($data)); 
} 

誰にもコピー&ペーストのソリューションを望んで念のために。

関連する問題