无法使用jsbn正确加密Javascript中的数据

时间:2013-03-27 18:42:15

标签: javascript encryption cryptography rsa jsbn

我无法使用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代码似乎返回一个值,并且不会抛出或返回任何错误。

我的猜测与公钥有关,但显然问题可能在其他地方。

1 个答案:

答案 0 :(得分:1)

为了后人,我会给出答案。答案一直在我脸上,只是太密集而无法实现。

JavaScript对base-64中的数据进行编码,因此必须在PHP识别数据之前对数据进行解码。因此,在PHP方面,需要进行简单的添加:

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

我将数据参数包装在base64_decode()中。