使用OpenSSL通过PHP解密从cryptico javascript发送的string时出现问题

我的问题涉及到 https://stackoverflow.com/users/1142256/nowgoo在一篇文章中的工作用Cryptico.jsencryption,用OpenSSL解密我试图用nowgoo评论原帖,但是我没有足够的影响力。

我已经准备了一个概念certificate ,详细说明了我的代码和相关文件在https://github.com/darrenwheatley/openssl_javascript这包括下面的index.php和我使用的修改后的cryptio.js文件,以及两个密钥在有格式问题的情况下。

使命:没有进入使用encryption和JavaScript的政治我希望encryption一个string使用JavaScript,然后解密它使用服务器端技术,在这个例子中,PHP,在我当前的环境。

环境:

来自phpinfo的OpenSSL细节

OpenSSL的

已启用OpenSSL支持OpenSSL库版本OpenSSL 1.0.1p 2015年7月9日OpenSSL标头版本OpenSSL 1.0.1p 2015年7月9日

指令openssl.cafile openssl.capath本地值无值无值主值无值无值

代码:

<?php // Code based on article https://stackoverflow.com/questions/16505963/encrypt-with-cryptico-js-decrypt-with-openssl if (isset($_POST["codeEnc"])) { // Process the input $keyPrivate = openssl_get_privatekey(file_get_contents('private2048.key')); openssl_private_decrypt(base64_decode($_POST["codeEnc"]), $decrypted, $keyPrivate); echo "Error Strong: ".openssl_error_string()."<br>\n"; echo "Decrypted code: ".$decrypted."<br>\n"; } // Set up the encryption $keyCert = openssl_get_publickey(trim(file_get_contents('public2048.pem'))); $detail = openssl_pkey_get_details($keyCert); $n = base64_encode($detail['rsa']['n']); $e = bin2hex($detail['rsa']['e']); ?> <html> <head><title>openssl test</title></head> <body> <form name="test" id="test" method="post" action="?"> <input id="code" name="code" type="text" value='Change this string'> <input id="codeEnc" name="codeEnc" type="hidden"> <input id="submit_code" name="submit_code" type="button" value="Go" onClick="submitPage('test');"> </form> <script src="modified_cryptico.js"></script> <script> function submitPage(formName) { // I had to change the next line because the output was {$n}|{$e} instead of the public key... php101 but I don't usually code this way. Perhaps this is the issue //var publicKey = '{$n}|{$e}'; var publicKey = '<?php echo $n; ?>|<?php echo $e; ?>'; var pCode = document.getElementById('code'); var pCodeEnc = document.getElementById('codeEnc'); encrypted = cryptico.encrypt(pCode.value, publicKey); pCodeEnc.value = encrypted.cipher; pCode.value = ''; document.forms[0].submit(); } </script> </body> </html> 

问题:当我运行代码,我得到以下的PHP错误:[12-Nov-2015 16:03:20 country / state] PHP警告:openssl_pkey_get_details()期望参数1是资源,布尔在index.php 12行

我的评价是我错误地形成了一个关键。 由于这是上面的例子之外,我坚持一个答案。

我试过的:

  • 研究许多方法,而不是先问这里
  • 我重新生成了每个键
  • 我试图修剪原始.pem和.key文件,因为我用它们
  • 我试图确保该文件是一个Windows兼容的文件

什么工作(但这是所有服务器端)?

  $private_key = openssl_get_privatekey(file_get_contents('private4096.key')); $public_key = openssl_get_publickey(file_get_contents('public4096.pem')); $data = '{"data":"f80643f0-a298-46e5-a852-85caf305b34a"}'; $encrypted = $e = NULL; $ret = openssl_seal($data, $encrypted, $e, array($public_key)); $sealed_data = base64_encode($encrypted); $envelope = base64_encode($e[0]); echo "sealed data:\n".$sealed_data."<br><br>\n\n"; echo "envelope:\n".$envelope."<br><br>\n\n"; $input = base64_decode($sealed_data); $einput = base64_decode($envelope); $plaintext = NULL; openssl_open($input, $plaintext, $einput, $private_key); echo "data out:\n".$plaintext."<br><br>\n"; 

为什么我偏离文章? (错误:02001003:系统库:fopen:没有这样的进程)下面的文章描述了我有的另一个问题。 OpenSSL不能在Windows上工作,错误0x02001003 0x2006D080 0x0E064002

使用.PEM和.KEY文件解决了这个问题。 它可能与手头的问题有关,也可能没有关系。

这是我的第一篇文章,所以我对任何失踪道歉。

任何人都可以请帮助我吗?