2012-02-20 21 views
8

私はjson文字列にデータを送信するmysqlとphpを実行しているWebサーバーを持っています。jsonの文字列を暗号化/復号化する最も良い方法は何ですか

私はデータを読み込んでそれを表示する第2のウェブサーバを持っています。

すべては今のところうまく動作します。

私は文字列にいくつかの機密データを追加する必要があるので、私はPHPを使用してjsonを暗号化/復号化する最良の方法は何ですか?

誰かが助けてもらえますか?

+0

あなたは暗号化ライブラリを検討していますか? – JohnFx

答えて

9

私は最も良い方法はSSL(HTTPS)を使用しており、OWASP Guide、特にHow-To sectionを読むことをお勧めします。

+0

合意。 HTTPSは方法です。あなたは最後まで待つことができず、 "秘密に"何かを送ろうと決めています。共有秘密が必要です。共有シークレットを持っていない場合は、HTTPSを使用して処理します。なぜ再改革? –

1

サーバーに秘密鍵を格納し、DES暗号化を使用します。これは2ウェイアルゴリズムです。

EDIT:コメントパー

、私が質問を誤解しましたようです。私の前提は、電子メールや何かのように暗号化されたデータをインターネット上に送り出し、後でデータを取り戻して解読できるようにするということでした。答えを提出する前に、私は今後コメントを明確にする必要があります。

+0

私はjsonを暗号化することができましたが、それを解読する方法や解読するコードを見つける方法を理解できません... – Steve

+0

SSLプロトコルを再発明することを提案していますか? – alexsuslin

+0

あなたはその質問を見つけることができないようです:http://stackoverflow.com/questions/610048/rsa-encryption-decryption-compatible-with-javascript-and-php – alexsuslin

13

それはあなたが探している何かなら、私はいつもmcryptの

//Key 
$key = 'SuperSecretKey'; 

//To Encrypt: 
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, 'I want to encrypt this', MCRYPT_MODE_ECB); 

//To Decrypt: 
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_ECB); 

が好きでした。それはJSONを文字列として扱い、解読した後にはjson_decode()やそれが何をしているのかを行わなければなりません。

+0

私は実際にあなたがそうするためのコードを提供してくれただけです。うまくいった! – quickshiftin

0

使用オープンSSL:

http://www.php.net/manual/en/book.openssl.php

それは利用できないだ場合は、HTTPSを必要とせずに公開鍵/秘密鍵のペアを生成することができます。

+0

「公開鍵/秘密鍵のペア」とは、非対称RSA暗号化を意味します。 RSAはデータを暗号化するように設計されておらず、暗号化できるデータ長は鍵サイズよりも小さくなければなりません。 – zaph

5

本当にデータの機密性によって決まります。しかし、私の経験から、単純なPHPの暗号化は通常、このトリックを行います。私は通常、JSON文字列にエンコードする前に、jsonデータフィールドの機密フィールドを暗号化します。

ここに暗号化部分のコードを示します。

$ key = 'パスワードを(en/de)crypt'にする。 $ string = '暗号化する文字列';

$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); 

を復号化するために://暗号化するためのスペース

を注意し

$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 

しかし、あなたは常に好ましくいくつかと、(MD5、SHA1)パスワードをハッシュする必要があり塩。

+0

塩はMCRYPT_RIJNDAEL_256で24文字より長くはできません。他は切断され、警告がスローされます。 MD5を使用する場合は、substr(md5($ salt)、0、24)を使用することをお勧めします。 – Gabriel

+0

PHP mcryptを使用しないことをお勧めします。これは放棄されており、何年も更新されておらず、標準のPKCS#7(néePKCS#5)パディングもサポートされていません。バイナリデータ。 mcryptには、2003年にさかのぼる多くの傑出したバグ(https://sourceforge.net/p/mcrypt/bugs/)があります。PHP 7.2では廃止予定のmcrypt拡張機能は削除されます。代わりに[defuse](https://github.com/defuse/php-encryption)または[RNCryptor](https://github.com/RNCryptor)を使用することを検討してください。これらは完全な解決策を提供し、維持され、正しいものです。 – zaph

-1

もちろん、ウェブ上でデータを安全に転送するにはSSL(HTTPS)が必要です。

しかし、それは送信する前にjsonデータを暗号化する理由がまだあります。

jsonデータの暗号化に問題がありました。これはjsonデータの "\ t"によって引き起こされたものです。 暗号化する前に削除する必要があります。さもなければ、それをプルパーjson形式に復号化するときに問題があります。

$ plain_txt = str_replace( "\ r"、 ''、$ plain_txt);

$ plain_txt = str_replace( "\ n"、 ''、$ plain_txt);

$ plain_txt = str_replace( "\ t"、 ''、$ plain_txt);

は、実施例を参照してください。 https://gist.github.com/petermuller71/33616d55174d9725fc00a663d30194ba

関連する問題