В настоящее время я пытаюсь запустить сервер python бок о бок с существующим Apache / php. Индивидуальное решение, к которому я пришел, состояло в том, чтобы сохранить $ _SESSION в виде зашифрованного куки-файла, позволяя аутентификации php работать, как раньше, а затем разделить закрытый ключ между двумя серверами.
Два выпуска:
- Как вам справиться с истечением срока действия сессии.
- Я не беспокоился о векторе инициализации, предполагая, что отметки времени из моего материала об истечении срока действия достаточно. См. https://stackoverflow.com/a/12486940/4495503, почему я могу быть слишком слаб в безопасности ...
В любом случае, моя php-функция зашифрованных файлов cookie:
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')
Надеюсь, что это кому-то поможет, вспомните все обычные вещи о генерации закрытых ключей, а затем будьте осторожны с ними!