0

ユーザー ID を php で暗号化し、javascript に送信します。それらをjavascriptで復号化します。
異なる言語間で暗号化および復号化するための一般的な方法はありますか?

ノードjsを使用しています。nodejs にはサーバー側の JavaScript があります。実際にはサーバー側の復号化です。しかし、それはジャバスクリプトです。

4

2 に答える 2

4

PHP と Coldfusion を使用する前に、クロスランゲージ暗号化を行いました。実装が若干異なるため、いくつかのトリックがありましたが、Javascript にはネイティブの暗号化機能がないため、Javascript ではさらに簡単になるはずです。自分で提供する必要があるため、必要なものを正確に提供できます。

mcryptPHP で暗号化するには、ライブラリをインストールする必要があります。アルゴリズムとして Blowfish を選択し、操作が簡単な ECB モードを使用しました。初期化ベクトルについて心配する必要はありませんが、理論的には安全性が低くなります。ただし、短いユーザー ID のみを暗号化する場合は、これで十分です。

以下は、mcrypt を使用して文字列を暗号化する例です。

$data = $user_id;
$data = base64_encode($data);
// Add PKCS5 padding to data string for compatibility
// This may not be necessary, depending on your Javascript implementation
$pad = 8 - (strlen($data) % 8);  
$data = $data . str_repeat(chr($pad), $pad);
$algorithm = MCRYPT_BLOWFISH;
$mode = MCRYPT_MODE_ECB;
$key = "SECRET";
$ciphertext = mcrypt_encrypt($algorithm, $key, $data, $mode, null);
$base64 = base64_encode($ciphertext);

はバイナリになることに注意してください$ciphertext。言語間で転送しやすくするために、base 64 でエンコードする必要があります。

暗号化された文字列を Node JS アプリに転送し、それを base64 からバイナリに戻すと、Javascript のフグ実装で復号化できるようになります。使いやすい例を次に示します: http://dren.ch/js_blowfish/

そのページの警告は無視しても問題ありません。これは、クライアント側で大きな文字列を復号化することを指しているためです (ばかげています)。サーバー上で実行している場合は、秘密鍵を安全に秘密に保つことができます。

上記の例では、文字列は暗号化される前に base64 でエンコードされているため、復号化後に再度 base64 でデコードする必要があることに注意してください。

また、Blowfish ECB のキー サイズの最小値と最大値にも注意して、頭を悩ませないようにしてください。これは、PHP のmcrypt_enc_get_support_key_sizes関数を使用して確認できます。

于 2013-10-31T15:48:29.743 に答える