函数名:openssl_sign()
适用版本:PHP 4 >= 4.0.4, PHP 5, PHP 7
用法:openssl_sign()函数用于对数据进行签名,使用指定的私钥进行加密。签名后的数据可以通过openssl_verify()函数进行验证。
语法: bool openssl_sign ( string $data , string &$signature , mixed $priv_key_id [, mixed $signature_alg = OPENSSL_ALGO_SHA256 ] )
参数:
- $data:要签名的数据,可以是字符串或二进制数据。
- $signature:签名后的数据将被存储在此变量中。
- $priv_key_id:私钥标识符,可以是由openssl_pkey_get_private()函数返回的私钥资源,或者是PEM格式的私钥字符串。
- $signature_alg:签名算法,默认为OPENSSL_ALGO_SHA256。可以使用openssl_get_md_methods()函数获取可用的签名算法列表。
返回值: 成功时返回true,失败时返回false。
示例:
// 加载私钥
$privateKey = openssl_pkey_get_private(file_get_contents('private_key.pem'));
// 要签名的数据
$data = "Hello, world!";
// 签名数据
if (openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256)) {
echo "签名成功!\n";
echo "签名数据:" . base64_encode($signature) . "\n";
} else {
echo "签名失败!\n";
}
// 验证签名
$publicKey = openssl_pkey_get_public(file_get_contents('public_key.pem'));
if (openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256)) {
echo "签名验证通过!\n";
} else {
echo "签名验证失败!\n";
}
// 释放资源
openssl_free_key($privateKey);
openssl_free_key($publicKey);
注意事项:
- 私钥和公钥需要通过openssl_pkey_get_private()和openssl_pkey_get_public()函数加载。
- 签名算法可以根据具体需求选择,常见的算法有OPENSSL_ALGO_SHA1、OPENSSL_ALGO_SHA256等。
- 在实际使用中,私钥应该妥善保管,不能泄露给他人。