Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP生成crx文件失败,错误为:“;包无效:CRX“U签名”“U验证”“U初始化”“U失败”;_Php_Google Chrome_Google Chrome Extension_Openssl_Public Key Encryption - Fatal编程技术网

通过PHP生成crx文件失败,错误为:“;包无效:CRX“U签名”“U验证”“U初始化”“U失败”;

通过PHP生成crx文件失败,错误为:“;包无效:CRX“U签名”“U验证”“U初始化”“U失败”;,php,google-chrome,google-chrome-extension,openssl,public-key-encryption,Php,Google Chrome,Google Chrome Extension,Openssl,Public Key Encryption,我正在使用PHP生成一个crx文件。当我尝试将crx安装到Chrome中时,出现了以下错误: Package is invalid: 'CRX_SIGNATURE_VERIFICATION_INITIALIZATION_FAILED' 这是我的密码: <?php //Include phpseclib files include('File/X509.php'); include('Crypt/RSA.php'); //RSA Handler $rsa = new Crypt_RSA(

我正在使用PHP生成一个crx文件。当我尝试将crx安装到Chrome中时,出现了以下错误:

Package is invalid: 'CRX_SIGNATURE_VERIFICATION_INITIALIZATION_FAILED'
这是我的密码:

<?php
//Include phpseclib files
include('File/X509.php');
include('Crypt/RSA.php');

//RSA Handler
$rsa = new Crypt_RSA();

//Create key pair
$keyPair = $rsa->createKey();

//Get the keys
$privKey = $keyPair[ "privatekey" ];
$pubKey = $keyPair[ "publickey" ];

//The Zip file contents
$zipContents = file_get_contents( "helloworld.zip" );

//Load the private key into the handler
$rsa->loadKey( $privKey );

//Sign the content (default is SHA1)
$signature = $rsa->sign( $zipContents ) ;

/* Tried this, but it also did not work */
//Convert to openSSH and remove the leading/trailing "comments": "ssh-rsa ", " phpseclib-generated-key"
//$rsa->loadKey( $pubKey );
//$rsa->setPublicKey(); 
//$pubKey = $rsa->getPublicKey( CRYPT_RSA_PUBLIC_FORMAT_OPENSSH );
//$pubKey = substr( $pubKey, 8, strlen( $pubKey ) - 32 );

//Encode public key in Base64 and remove the "-----BEGIN PUBLIC KEY-----\r\n" and "\r\n-----END PUBLIC KEY-----" (to put in .crx)
$base64Key = base64_decode( substr( $pubKey, 28, strlen( $pubKey ) - 54 ) );

//Create the crx (wb = write in binary mode)
$crxFile = fopen( "helloworld.crx", "wb" );

//Add crx "magic" marker, format version
fwrite( $crxFile, "Cr24" );
fwrite( $crxFile, pack( "V", 2 ) );

//Write public key and signature length
fwrite( $crxFile, pack( "V", strlen( $base64Key ) ) );
fwrite( $crxFile, pack( "V", strlen( $signature ) ) );

//Write public key (base64 encoded) and signature
fwrite( $crxFile, $base64Key );
fwrite( $crxFile, $signature );

//Write the zip file contents
fwrite( $crxFile, $zipContents );

fclose( $crxFile );
?>


我做错了什么?我猜这与密钥的格式和签名有关?

我找到了答案!签名使用的是
CRYPT\u RSA\u签名\u PSS
,显然只适用于
PKCS1
。因此,您需要添加以下行:

$rsa->setSignatureMode( CRYPT_RSA_SIGNATURE_PKCS1 );
在签名创建代码之前。因此,签名代码现在如下所示:

//Load the private key into the handler
$rsa->loadKey( $privKey );

//Sign the content (default is SHA1)
$rsa->setSignatureMode( CRYPT_RSA_SIGNATURE_PKCS1 ); /* <-- This is required */
$signature = $rsa->sign( $zipContents ) ;
//将私钥加载到处理程序中
$rsa->loadKey($privKey);
//对内容进行签名(默认值为SHA1)
$rsa->setSignatureMode(加密\u rsa\u签名\u PKCS1);/*符号($zipContents);