В настоящее время я пытаюсь запустить сервер Python рядом с существующим сервером Apache/php. Личное решение, к которому я пришел, заключалось в том, чтобы сохранить $_SESSION в виде зашифрованного файла cookie, позволяя аутентификации php работать, как и раньше, а затем совместно использовать закрытый ключ между двумя серверами.
Две проблемы:
- Вам решать, как обращаться с истечением срока действия сеанса.
- Я не беспокоился о векторе инициализации, предполагая, что отметка времени из моего материала с истечением срока действия достаточна. См. https://stackoverflow.com/a/12486940/4495503, чтобы узнать, почему я могу быть слишком слабым в плане безопасности...
В любом случае, моя функция cookie с шифрованием php:
session_start();
$encryptToCookie = function($varToEncode,$cookieName,$privateKey){
$iv = $privateKey;
$pass = $privateKey;
$method = 'aes-128-cbc';
$encryptedString = openssl_encrypt(json_encode($varToEncode), $method, $pass, true, $iv);
setcookie($cookieName,bin2hex($encryptedString));
};
$encryptToCookie($_SESSION,"sessionEncrypted","yohoyohoyohoyoho"); // private key must be 16bit
И моя расшифровка на стороне python:
from subprocess import Popen, PIPE
import binascii
def decrypt(encryptedString,privateKey):
encryptedString = binascii.unhexlify(encryptedString)
pathToOpenSSL = 'C:\pysrc\openssl\openssl.exe' # MODIFY THIS!!
openssl = Popen([pathToOpenSSL,
'enc','-aes-128-cbc','-d',
'-nosalt','-nopad','-K',
privateKey.encode('hex'),
'-iv',
privateKey.encode('hex')],
stdin=PIPE,stdout=PIPE)
decryptedString = openssl.communicate(encryptedString)[0].replace('\x04','')
return decryptedString
decrypt(encryptedString,'yohoyohoyohoyoho')
Надеюсь, это поможет кому-то, помните все обычные вещи о создании закрытых ключей, а затем будьте осторожны с ними!
person
leontrolski
schedule
02.10.2015