0

Tom Wu の jsbn ライブラリを使用して JavaScript でデータを暗号化するのに問題があります。

暗号化されたデータになってしまいますが、PHP でデータを復号化しようとすると、openssl_private_decrypt が false を返します。

公開鍵をエンコードする方法は可能ですか?

データを暗号化する JavaScript コードを次に示します。

function encryptData(data)
{
    var $oDataEncrypted = "";

    // Do not forget to escape the lines:
    var $pem = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoEu5N3x/6aK7E4A9f+7AV/A9T\nT6zu5zdM6L+6XViYC6JssiV1JVE/x/5yd4mVrG8CFkOaF9QqOIFFnQnQw+O+5B/3\nRdoIAssExytGyjY7k11u9jKZI+xRslCxQRoQnUzEVE29Vr6TWUwpxrnpsl+z/5ej\n+Yk8UsMJRkBvmSMdDwIDAQAB\n-----END PUBLIC KEY-----";

    // Create the RSA object.
    var $key = RSA.getPublicKey($pem);

    $oDataEncrypted = RSA.encrypt(data, $key);

    return $oDataEncrypted;
}

1 つの考えは "\n" であり、おそらく JavaScript は PHP とは異なり、構造を自動的に理解しないか、ライブラリーが理解しないのではないかと考えました。

次の場所で入手した最新のファイルを使用しています。

http://www-cs-students.stanford.edu/~tjw/jsbn/

https://github.com/ziyan/javascript-rsa/tree/master/src

テストのために、暗号化された値を (テスト用の JavaScript 側に Visual Studio を使用して) PHP ファイルにコピー アンド ペーストしました。キーを openssl_private_decrypt() に渡すと、FALSE が返されます。悲しいことに、openssl_private_decrypt は理由を返さず、JavaScript コードは値を返すように見え、エラーがスローまたは返されません。

私の推測では、公開鍵に関するものですが、明らかに問題は別の場所にある可能性があります。

4

1 に答える 1

1

後世の為、お答えします。答えは少しの間私の目の前にありました。

JavaScript は base-64 でデータをエンコードするため、PHP がデータを認識する前にデータをデコードする必要があります。したがって、PHP 側では、単純な追加が必要です。

if(!openssl_private_decrypt(base64_decode($dataArg1), $sensitiveData, $key))

data 引数を base64_decode() でラップしました。

于 2013-03-29T21:11:25.627 に答える