将加密/解密密钥从Python传递给PHP?

时间:2016-01-14 10:53:22

标签: php python encryption

我正在使用 Python Pycrypto 模块生成 RSA 密钥对:

#!/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之间的通信可以优化,请通知我。 谢谢!

1 个答案:

答案 0 :(得分: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];

?>