我正在使用blenc函数加密一些PHP代码。
环境情况如下:
如果我在cli模式下使用加密脚本,就没有问题。
如果我使用同样的加密脚本通过lighttpd (cgi),我会得到一个500内部错误-
http://x.x.x.x/myscript.php 的第一次调用可以工作,但以下错误将失败:
2016-03-09 :48:45:(mod_fastcgi.c.2562)意外的文件结束(也许快速for进程死了):pid: 1886套接字: unix:/tmp/php.socket-0 2016-03-09 :48:45:45:(mod_fastcgi.c.3346)响应未收到,请求发送: 1078 on套接字: unix:/tmp/php.socket-0表示/myscript.php,关闭连接
编辑
多亏了我的同事,我发现了这个问题,并知道如何解决这个问题。
这个问题来自Zend OPcache,它与blenc扩展不兼容。
[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=0编辑
当然,我可以共享代码的一部分:
在打包(加密代码的地方)中,我将重新分配密钥存储到“ekey”文件中:
由于我对所有加密文件使用相同的密钥,所以对于所有文件,重新分配密钥都是相同的:
$encryptionKey = md5("myApp".rand (1, 65534).time());
if ($obfuscate) {
$redistributionKey = blenc_encrypt("someText", "/tmp/ekey", $encryptionKey);
file_put_contents(__DIR__."/ekey", $redistributionKey);
}下一步是使用相同的$encryptionKey - PHP标记加密文件:
$oFileNoTags = preg_replace(array('/^<(\?|\%)\=?(php)?/', '/(\%|\?)>$/'), array('',''), $oFile);
if (function_exists("blenc_encrypt")) {
$redistributionKey = blenc_encrypt($oFileNoTags, $destFolder.basename($file), $encryptionKey);
} else {
$this->errror(570, "blenc_encrypt function not available. Please install first using PECL");
}最后,在客户端上安装新包时,将读取“ekey”文件,覆盖现有密钥:
$newKeyEncryptionValue = file_get_contents(__DIR__."/ekey");
if (strpos($keyFileContent, $newKeyEncryptionValue) === false) {
// file_put_contents($keyFile, $newKeyEncryptionValue."\n", FILE_APPEND);
$this->system("echo '".$newKeyEncryptionValue."' | sudo tee ".$keyFile);
}我想有一个错误与blenc和快速-cgi无法解释,或者可能是一些错误的配置。
发布于 2016-03-09 11:00:36
我及时在另一个问题上读到了金发碧眼的问题。虽然我无法确认这一点,但无法看到您的代码。显然,PHP的代码显示错误(正如我刚才检查的那样,我可以确认它仍然是错误的)。因此,我将假设您使用PHP文档中的代码,这是错误的。而不是:
file_put_contents($key_file, $redistributable_key, FILE_APPEND);你应该使用:
file_put_contents($key_file, $redistributable_key."\n", FILE_APPEND);这将解释为什么您的脚本第一次工作,但不是第二次。第一个代码示例将所有键写到同一行,而不是新行,这会损坏键。
https://stackoverflow.com/questions/35887138
复制相似问题