如果您只需要一個非常簡單的私鑰/公鑰對,這可能會有幫助
<?php
$data = "Beeeeer is really good.. hic...";
// 你可以使用以下方式取得一組簡單的私鑰/公鑰對:
// 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('tampered'.$data, $binary_signature, $public_key, OPENSSL_ALGO_SHA1);
echo "檢查 #2: ";
if ($ok == 1) {
echo "錯誤:資料已被竄改,但簽章仍然有效!啊!\n";
} elseif ($ok == 0) {
echo "簽章錯誤(應為如此,因為資料已被竄改)\n";
} else {
echo "嚴重錯誤,檢查簽章時發生錯誤\n";
}
?>