2013-12-13 46 views
1

我試圖加密在JavaScript一些文本,然後將其發送到PHP解密(ETC:使用Ajax),在那裏解密並保存(ETC:在MySQL)。加密字符串,並在PHP與RSA技術

這是到目前爲止我的代碼:

在JavaScript:

我使用這個庫的加密: http://travistidwell.com/blog/2013/02/15/a-better-library-for-javascript-asymmetrical-rsa-encryption/

function ConvertToURL(data) { 
    // Converts data to URL friendly form 
    // etc: Replaces '+', '/', '=' with 'plus', 'slash', 'equal' 
}; 
function AjaxOrder(data) { 
    // Sends data in PHP with Ajax 
}; 

var publicKey = '-----BEGIN PUBLIC KEY----- 
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtN 
FOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76 
xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4 
gwQco1KRMDSmXSMkDwIDAQAB 
-----END PUBLIC KEY-----'; 

var encrypt = new JSEncrypt(); 
encrypt.setPublicKey(publicKey); 
var encrypted = encrypt.encrypt('Text to send.'); 

AjaxOrder(ConvertToURL(encrypted)); 

在PHP:

$dataPost = $_POST('dt'); 

function ConvertFromURL($data) { 
    // Converts $data to original form 
    // etc: Replaces 'plus', 'slash', 'equal' with '+', '/', '=' 
} 
function ReturnData($data) { 
    // Sends $data back in JavaScript as an answer to Ajax 
} 

$privateKey = '-----BEGIN RSA PRIVATE KEY----- 
MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ 
WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR 
aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB 
AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv 
xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH 
m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd 
8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF 
z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5 
rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM 
V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe 
aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil 
psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz 
uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876 
-----END RSA PRIVATE KEY-----'; 

openssl_private_decrypt(ConvertFromURL($dataPost), $decryptedWord, $privateKey); 

ReturnData(base64_encode($decryptedWord)); 

現在PHP的答案每次都是空的。任何想法,使這項工作?

謝謝你的時間!

+0

請參閱這篇文章:http://www.matasano.com/articles/javascript-cryptography/ – ntoskrnl

回答

0

是的,

它添加了一些「隨機」填充的消息之前,它做的魔術。

+0

是隻是我是這麼認爲的。但問題是如何才能實現兩種語言之間的加密傳輸。有沒有比RSA更好的方法?或者至少我可以停止隨機過程來使兩種語言交流? – Kostas

+0

您不想停止隨機數,因爲這是加密的一部分。如果你用私鑰解密消息,如果你做得正確,它會返回原始消息。 – Janmar

+0

好吧,這不是問題..但它仍然無法正常工作。 – Kostas

0

也許嘗試在ConvertFromURL($data)功能做base64_decode

+0

我也這麼做! :) – Kostas