2016-01-14 51 views
0

我使用Python的Pycrypto模塊生成RSA密鑰對將加密/解密密鑰從Python傳遞給PHP?

#!/home/user/Desktop/generate_keys.py 

from Crypto.PublicKey import RSA 
from Crypto import Random 

random_generator = Random.new().read 
key = RSA.generate(1024,random_generator) 
public_key = key.publickey().exportKey()    #export public key 
private_key = key.exportKey()       #export private key 

print(public_key) 
print(private_key) 

我需要做的就是運行在Python腳本,並通過這兩個鍵來PHP將其存儲在數據庫中。我試圖通過在shell中執行python腳本來傳遞變量,然後在PHP中輸出。

<?php 

    $command = escapeshellcmd('python3 generate_keys.py'); 
    $public_key = shell_exec($command); 
    echo $public_key; 

?> 

這裏的問題是我不知道如何從Python中傳遞變量到PHP,所有我做的是一個Python腳本的輸出到PHP。

如果我嘗試做在Python中的兩個獨立的腳本:

公鑰:

from Crypto.PublicKey import RSA 
from Crypto import Random 

random_generator = Random.new().read 
key = RSA.generate(1024,random_generator) 

print(key.publickey().exportKey()) 

的私鑰:

from Crypto.PublicKey import RSA 
from Crypto import Random 

random_generator = Random.new().read 
key = RSA.generate(1024,random_generator) 

print(key.exportKey()) 

我會得到一個不同的密鑰對每次我運行這些random_generator

如何將Python ('public_key' & 'private_key')的變量傳遞給PHP變量?

我檢查了一些關於從python傳遞變量到php的答案,反之亦然,但我不明白。 如果php,python和shell之間的通信可以優化,請通知我。 謝謝!

+0

我覺得http://stackoverflow.com/questions/5497540/how-to-call-a-python-script-from-php顯示如何調用從PHP的蟒蛇(http://php.net /manual/en/function.system.php)並獲取所有返回值。 – Eich

回答

1

你幾乎在那裏;)你總是可以將2個鍵組合成一個字符串,並在其間加上一個分隔符。

#!/home/user/Desktop/generate_keys.py 

from Crypto.PublicKey import RSA 
from Crypto import Random 

random_generator = Random.new().read 
key = RSA.generate(1024,random_generator) 
public_key = key.publickey().exportKey()    #export public key 
private_key = key.exportKey()       #export private key 

data = public_key + "||" + private_key 
print(data) 

所以,當你在PHP中接收到的數據,你可以只使用explode(delimiter, string)

<?php 

    $command = escapeshellcmd('python3 generate_keys.py'); 
    $keys = shell_exec($command); 
    $splitted_keys = explode("||", $keys); 
    echo $splitted_keys[0]; 

?> 
+0

謝謝你解決了我的問題xD 但你能告訴我一些方法來在它們之間傳遞變量嗎? –

+0

您可以隨時使用命令行參數[與python進行通信。](http://www.cyberciti.biz/faq/python-command-line-arguments-argv-example/)'sys.argv'是一個數組在python3之後從cmd抓取的物品。 (閱讀鏈接,它有一個更全面的解釋) –