2013-03-27 29 views
0

我在使用Tom Wu的jsbn庫加密JavaScript中的數據時遇到了問題。無法使用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的JavaScript端進行測試),以我的PHP文件。我將密鑰傳遞給openssl_private_decrypt()並返回FALSE。可悲的是,openssl_private_decrypt沒有返回原因,JavaScript代碼似乎返回一個值,並且沒有錯誤被拋出或返回。

我的猜測與公鑰有關,但顯然這個問題可能在別的地方。

回答

1

爲了後代的緣故,我會給出答案。答案一直在我的臉上,只是太密集而無法實現。

JavaScript以base-64編碼數據,因此數據必須在PHP識別之前解碼。因此,在PHP方面,需要一個簡單的加法:

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

我將數據參數包裝在base64_decode()中。

相關問題