我在使用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;
}一种想法是"\n“,也许与PHP不同,JavaScript不会自动理解该构造,或者库不会。
我使用的是从以下网址获得的最新文件:
http://www-cs-students.stanford.edu/~tjw/jsbn/
https://github.com/ziyan/javascript-rsa/tree/master/src
为了进行测试,我将加密值复制并粘贴到我的JavaScript文件中(使用Visual Studio进行测试)。我将我的键传递给openssl_private_decrypt(),并得到FALSE的返回。遗憾的是,openssl_private_decrypt没有返回原因,并且JavaScript代码似乎返回值,并且没有抛出或返回任何错误。
我的猜测是与公钥有关,但显然问题可能出在其他地方。
发布于 2013-03-30 05:11:26
为了子孙后代,我会给出答案。答案在我面前已经有一段时间了,只是太过迷茫而没有意识到。
JavaScript以base-64编码数据,因此必须先对数据进行解码,然后才能识别它。因此,在PHP端,需要添加一个简单的内容:
if(!openssl_private_decrypt(base64_decode($dataArg1), $sensitiveData, $key))我将数据参数包装在base64_decode()中。
https://stackoverflow.com/questions/15666885
复制相似问题