如果您只需要一个简单的私钥/公钥对,这可能会有所帮助
<?php
$data = "啤酒真不错.. 嗝...";
// 你可以使用以下命令生成简单的私钥/公钥对:
// openssl genrsa 512 > private_key.txt
// openssl rsa -pubout < private_key.txt > public_key.txt
// 重要提示:以下密钥对仅供测试使用。
// 出于安全考虑,您必须为生产环境生成新的密钥对。
$private_key = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6zxqlVzz0wy2j4kQVUC4Z
RZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQJAL151ZeMKHEU2c1qdRKS9
sTxCcc2pVwoAGVzRccNX16tfmCf8FjxuM3WmLdsPxYoHrwb1LFNxiNk1MXrxjH3R
6QIhAPB7edmcjH4bhMaJBztcbNE1VRCEi/bisAwiPPMq9/2nAiEA3lyc5+f6DEIJ
h1y6BWkdVULDSM+jpi1XiV/DevxuijMCIQCAEPGqHsF+4v7Jj+3HAgh9PU6otj2n
Y79nJtCYmvhoHwIgNDePaS4inApN7omp7WdXyhPZhBmulnGDYvEoGJN66d0CIHra
I2SvDkQ5CmrzkW5qPaE2oO7BSqAhRZxiYpZFb5CI
-----END RSA PRIVATE KEY-----
EOD;
$public_key = <<<EOD
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6
zxqlVzz0wy2j4kQVUC4ZRZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQ==
-----END PUBLIC KEY-----
EOD;
$binary_signature = "";
// 至少在 PHP 5.2.2 / OpenSSL 0.9.8b (Fedora 7) 上
// 看起来不需要调用 openssl_get_privatekey 或类似函数。
// 只需按上面定义的方式传递密钥即可
openssl_sign($data, $binary_signature, $private_key, OPENSSL_ALGO_SHA1);
// 校验签名
$ok = openssl_verify($data, $binary_signature, $public_key, OPENSSL_ALGO_SHA1);
echo "校验 #1: ";
if ($ok == 1) {
echo "签名正确 (应该如此)\n";
} elseif ($ok == 0) {
echo "签名错误 (存在问题)\n";
} else {
echo "错误,签名校验失败\n";
}
$ok = openssl_verify('篡改'.$data, $binary_signature, $public_key, OPENSSL_ALGO_SHA1);
echo "校验 #2: ";
if ($ok == 1) {
echo "错误:数据已被篡改,但签名仍然有效!糟糕!\n";
} elseif ($ok == 0) {
echo "签名错误 (应该如此,因为数据已被篡改)\n";
} else {
echo "错误,签名校验失败\n";
}
?>