首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >blenc_encrypt - php-cgi进程崩溃

blenc_encrypt - php-cgi进程崩溃
EN

Stack Overflow用户
提问于 2016-03-09 09:05:46
回答 1查看 266关注 0票数 0

我正在使用blenc函数加密一些PHP代码。

环境情况如下:

  • Lighttpd作为web服务器,启用了快速web模块
  • 存储在/usr/local/etc/blenckey中的密钥
  • 一种加密的PHP脚本,可以在cli或web模式下使用
  • cgi和cli之间的php.ini完全相同。

如果我在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扩展不兼容。

代码语言:javascript
复制
[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=0

编辑

当然,我可以共享代码的一部分:

在打包(加密代码的地方)中,我将重新分配密钥存储到“ekey”文件中:

由于我对所有加密文件使用相同的密钥,所以对于所有文件,重新分配密钥都是相同的:

代码语言:javascript
复制
$encryptionKey = md5("myApp".rand (1, 65534).time());
if ($obfuscate) {
    $redistributionKey = blenc_encrypt("someText", "/tmp/ekey", $encryptionKey);
    file_put_contents(__DIR__."/ekey", $redistributionKey);
}

下一步是使用相同的$encryptionKey - PHP标记加密文件:

代码语言:javascript
复制
$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”文件,覆盖现有密钥:

代码语言:javascript
复制
$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无法解释,或者可能是一些错误的配置。

EN

回答 1

Stack Overflow用户

发布于 2016-03-09 11:00:36

我及时在另一个问题上读到了金发碧眼的问题。虽然我无法确认这一点,但无法看到您的代码。显然,PHP的代码显示错误(正如我刚才检查的那样,我可以确认它仍然是错误的)。因此,我将假设您使用PHP文档中的代码,这是错误的。而不是:

代码语言:javascript
复制
file_put_contents($key_file, $redistributable_key, FILE_APPEND);

你应该使用:

代码语言:javascript
复制
file_put_contents($key_file, $redistributable_key."\n", FILE_APPEND);

这将解释为什么您的脚本第一次工作,但不是第二次。第一个代码示例将所有键写到同一行,而不是新行,这会损坏键。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35887138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档