2016-01-14 52 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抓取的物品。 (阅读链接,它有一个更全面的解释) –