本文目录导读:

在 PHP 中,“包签名”通常指的是代码签名,而不是包管理(如 Composer 包)的签名,但在不同场景下,含义有所不同,以下分常见场景说明:
Composer 包的签名(最常见)
如果你指的是给 Composer 包(库)做签名验证,通常有两种方式:
a) 使用 Composer 的 integrity 哈希校验
Composer 在 composer.lock 文件中会记录每个包的 hash,用于验证下载的包是否被篡改。
# 生成锁文件(包含哈希) composer update # 验证锁文件哈希 composer validate --no-check-publish
b) 包签名(数字签名)
通常使用 GPG 对包进行签名,但 Composer 原生不支持 GPG,需要自己实现。
示例:使用 GPG 签名包文件
# 生成 GPG 密钥(如果没配置) gpg --full-generate-key # 对包文件签名 gpg --detach-sign --output my-package.tar.gz.sig my-package.tar.gz # 验证签名 gpg --verify my-package.tar.gz.sig my-package.tar.gz
PHP 代码签名(Phar 包签名)
当你用 PHP 构建 Phar 归档(类似 Java 的 JAR)时,Phar 本身支持签名。
<?php
$phar = new Phar('myapp.phar');
$phar->buildFromDirectory('src/');
$phar->setStub('<?php Phar::mapPhar(); include "phar://myapp.phar/index.php"; __HALT_COMPILER();');
// 签名方式
$phar->setSignatureAlgorithm(Phar::SHA256); // 常用
// 或 SHA512、MD5、OPENSSL
签名算法支持
| 常量 | 说明 |
|---|---|
Phar::MD5 |
简单哈希 |
Phar::SHA1 (默认) |
安全哈希 |
Phar::SHA256 |
推荐 |
Phar::SHA512 |
更安全 |
Phar::OPENSSL |
需要 OpenSSL 私钥 |
OpenSSL 签名示例
<?php
$privateKey = file_get_contents('private.pem');
$phar = new Phar('signed.phar');
// ...构建内容...
$phar->setSignatureAlgorithm(Phar::OPENSSL, $privateKey);
HTTP API 签名(JWT / HMAC)
如果你的“包签名”是指 API 请求签名(比如微信支付、支付宝等),常见做法:
HMAC-SHA256 签名
<?php
function generateSignature($params, $secretKey) {
ksort($params); // 按字母排序
$stringToSign = http_build_query($params);
return hash_hmac('sha256', $stringToSign, $secretKey);
}
// 使用
$params = ['amount' => 100, 'order_id' => '123'];
$signature = generateSignature($params, 'your-secret-key');
$params['sign'] = $signature;
代码完整性校验(自定义)
如果你想对自己的 PHP 代码/包做完整性校验:
<?php
// 生成校验和
$files = glob('src/*.php');
foreach ($files as $file) {
echo $file . ' => ' . hash_file('sha256', $file) . PHP_EOL;
}
// 验证时比对
$expectedHash = '...';
$actualHash = hash_file('sha256', $file);
if ($expectedHash === $actualHash) {
echo "文件未被篡改\n";
} else {
echo "文件已被修改\n";
}
Composer 安全签名(P2P 下载)
Composer 从 2.x 开始支持 Packagist 下载时的安全机制,包括:
composer audit(CVE 扫描)composer verify(验证依赖完整性)
# 验证依赖版本是否安全 composer audit # 检查 Composer 配置的安全性 composer diagnose
总结建议
| 你的需求 | 推荐方案 |
|---|---|
| Composer 包发布 | 用 GPG 签名或官方 composer 校验 |
| Phar 应用发布 | 用 Phar 内置签名(SHA256/OpenSSL) |
| API 请求签名 | HMAC-SHA256 或 JWT |
| 源码完整性 | Git 签名 + sha256 校验文件 |
| 安全审计 | Composer Audit + 代码扫描 |
如果你说的“包签名”是其他含义,请补充具体场景,我会给出更精准的解决方案。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播