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 コードは値を返すように見え、エラーがスローまたは返されません。
私の推測では、公開鍵に関するものですが、明らかに問題は別の場所にある可能性があります。