5

単純なテキスト (5 ~ 6 個の数字および/または文字) の双方向暗号化を作成する方法を探しています。問題は、php で暗号化を行い、Javascript で復号化したいということです。PHPの場合、mcrypt_encodeを使用してテストし、動作するようになったため、javascriptで復号化しようとすると(Crypto-jsライブラリを使用しています- http://code.google.com/p/crypto-js / ) 結果が得られません。私が使用しているphpコードは次のとおりです。

$key = "oijhd981727783hy18274";
$text = "1233";
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC,$iv);
echo base64_encode($crypttext);

そして、ここに私が使用しているJavascriptコードがあります:

var encrypted = CryptoJS.enc.Base64.parse("LiJU5oYHXRSNsrjMtCr5o2ev7yDFGZId85gh9MEXPeg=");
var key = 'oijhd981727783hy18274';
var decrypted = CryptoJS.AES.decrypt(encrypted, key);
document.write( decrypted.toString(CryptoJS.enc.Utf8) );

私はちょうどテストしているので、php からの出力を JS に直接コピーして貼り付け、結果が返されるかどうかを確認しますが、それは起こりません。私は暗号化/復号化の部分が初めてなので、何か不足している可能性があります。どんな提案でも大歓迎です。

余談ですが、ここで他のタイプの通信を使用してデータを転送することについて多くの提案を読んだので、この文字列をサードパーティのソフトウェアに渡す必要があるため、この場合は不可能です。 javascriptのみを編集するためのアクセス権がある安全な領域で、これが、テキストをphpで暗号化し、それをWebサイトのソース内に配置しようとしている理由です。そこから、サードパーティのソフトウェアが暗号化されたときにそれを読み取ります。そして、それを安全なセクションに転送します。そこで、Javascript を介して暗号化を解除する必要があります (そこでは php にアクセスできません)。

4

3 に答える 3

5

そのため、さらに掘り下げた後、次のオンライン暗号化/復号化にたどり着き、GitHubリポジトリの意味不明な aes にたどり着きました。

最初のリンクのコメントの 1 つの中に、この JS ライブラリに相当する php があることがわかりました。これはかなりうまく機能しているようで、デプロイもかなり簡単です: https://github.com/ivantcholakov/gibberish-aes-php

Lars が提供してくれた回答に感謝します。私は彼にリポジトリを開くことを勧めます。彼は誰かの人生を少し楽にしてくれると確信しています :)

于 2012-08-03T15:49:33.960 に答える
3

CryptoJS ドキュメントから:

キーについては、文字列を渡すとパスフレーズとして扱われ、実際のキーと IV を導出するために使用されます。または、実際のキーを表す WordArray を渡すこともできます。実際のキーを渡す場合は、実際の IV も渡す必要があります。

だからあなたのラインで

var decrypted = CryptoJS.AES.decrypt(encrypted, key);

「oijhd981727783hy18274」は、実際のキーではなく、キーを作成するためのパスフレーズとして扱われます。

IV を渡すと、次のように機能します。

var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
var iv  = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');

var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });
于 2012-10-24T14:00:39.363 に答える
0

少し前に私は同じ問題を抱えていました。最終的にhttp://code.google.com/p/slowaes/のSlowAESをいくつか修正して使用するようになり、それを PHP に移植しました。

注: 公式のソースは、公式の PHP ポートと同様に壊れています。

興味があれば教えてください。次に、必要なものすべてを取得できる GitHub で新しいリポジトリを開きます...

于 2012-08-03T15:12:21.013 に答える