使用PHP创建Google Chrome Crx文件

时间:2011-02-16 06:37:03

标签: php google-chrome google-chrome-extension crx

我希望能够使用PHP生成crx文件。

crx文件是一个带有附加标题的zip文件,而且我对如何创建此标题感到很遗憾。如果我使用预生成的pem文件,我可以创建一个crx文件,但这会导致所有crx文件具有相同的扩展ID,这不是很好。这是迄今为止我所得到的链接..... http://valorsolo.com/index.php?page=Viewing%20Message&id=1472&pagenum=2#1500

包含它有助于在Python中完成这一点,这里有一篇关于更精细细节的优秀博客文章.... http://blog.roomanna.com/12-12-2010/packaging-chrome-extensions
并且有关于该主题的其他代码的一些链接.....
http://code.google.com/chrome/extensions/crx.html
http://code.google.com/p/crx-packaging/source/browse/trunk/packer.py
https://github.com/bellbind/crxmake-python/blob/master/crxmake.py
http://www.curetheitch.com/projects/buildcrx/

3 个答案:

答案 0 :(得分:3)

ruby code很有帮助。

你的公钥必须是DER格式,遗憾的是PHP的OpenSSL扩展无法做到这一点,据我所知。我必须在命令行从我的私钥生成它:

openssl rsa -pubout -outform DER < extension_private_key.pem > extension_public_key.pub

UPDATE :有一个PHP der2pem()函数available here,感谢tutuDajuju指出它。

完成后,构建.crx文件非常简单:

# make a SHA1 signature using our private key
$pk = openssl_pkey_get_private(file_get_contents('extension_private_key.pem'));
openssl_sign(file_get_contents('extension.zip'), $signature, $pk, 'sha1');
openssl_free_key($pk);

# decode the public key
$key = base64_decode(file_get_contents('extension_public_key.pub'));

# .crx package format:
#
#   magic number               char(4)
#   crx format ver             byte(4)
#   pub key lenth              byte(4)
#   signature length           byte(4)
#   public key                 string
#   signature                  string
#   package contents, zipped   string
#
# see http://code.google.com/chrome/extensions/crx.html
#
$fh = fopen('extension.crx', 'wb');
fwrite($fh, 'Cr24');                             // extension file magic number
fwrite($fh, pack('V', 2));                       // crx format version
fwrite($fh, pack('V', strlen($key)));            // public key length
fwrite($fh, pack('V', strlen($signature)));      // signature length
fwrite($fh, $key);                               // public key
fwrite($fh, $signature);                         // signature
fwrite($fh, file_get_contents('extension.zip')); // package contents, zipped
fclose($fh);

答案 1 :(得分:2)

CRX格式在文档页面中有详细描述: http://code.google.com/chrome/extensions/crx.html

Ruby和Bash的文件末尾有一些例子。请遵循您的语言格式(PHP)。

答案 2 :(得分:2)

您可以使用有效的PHP解决方案:https://github.com/andyps/crxbuild 您可以在项目和命令行脚本中包含一个PHP类。