我无法使用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”,也许JavaScript与PHP不同,它不会自动理解构造,或者库不会。
我正在使用在
获得的最新文件http://www-cs-students.stanford.edu/~tjw/jsbn/
https://github.com/ziyan/javascript-rsa/tree/master/src
为了进行测试,我将加密值(使用Visual Studio for JavaScript方面进行测试)复制并粘贴到我的PHP文件中。我将我的密钥传递给openssl_private_decrypt()并返回FALSE。遗憾的是,openssl_private_decrypt没有返回原因,并且JavaScript代码似乎返回一个值,并且不会抛出或返回任何错误。
我的猜测与公钥有关,但显然问题可能在其他地方。
答案 0 :(得分:1)
为了后人,我会给出答案。答案一直在我脸上,只是太密集而无法实现。
JavaScript对base-64中的数据进行编码,因此必须在PHP识别数据之前对数据进行解码。因此,在PHP方面,需要进行简单的添加:
if(!openssl_private_decrypt(base64_decode($dataArg1), $sensitiveData, $key))
我将数据参数包装在base64_decode()中。