php – 混淆了API签名的公钥和私钥对
我创建了一个需要使用签名请求进行授权的API.
我正在使用php openssl_sign和openssl_verify函数. 我是从http://uk.php.net/manual/en/function.openssl-sign.php开始的这个例子 <?php $data = "Beeeeer is really good.. hic..."; // You can get a simple private/public key pair using: // openssl genrsa 512 >private_key.txt // openssl rsa -pubout <private_key.txt >public_key.txt // IMPORTANT: The key pair below is provided for testing only. // For security reasons you must get a new key pair // for production use,obviously. $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 = ""; // At least with PHP 5.2.2 / OpenSSL 0.9.8b (Fedora 7) // there seems to be no need to call openssl_get_privatekey or similar. // Just pass the key as defined above openssl_sign($data,$binary_signature,$private_key,OPENSSL_ALGO_SHA1); // Check signature $ok = openssl_verify($data,$public_key,OPENSSL_ALGO_SHA1); echo "check #1: "; if ($ok == 1) { echo "signature ok (as it should be)n"; } elseif ($ok == 0) { echo "bad (there's something wrong)n"; } else { echo "ugly,error checking signaturen"; } $ok = openssl_verify('tampered'.$data,OPENSSL_ALGO_SHA1); echo "check #2: "; if ($ok == 1) { echo "ERROR: Data has been tampered,but signature is still valid! Argh!n"; } elseif ($ok == 0) { echo "bad signature (as it should be,since data has beent tampered)n"; } else { echo "ugly,error checking signaturen"; } ?> 但我很想知道如何将其实现为URI请求. 在http get请求中使用私钥和公钥似乎很大,客户端如何能够生成可由服务器验证的签名? 解决方法
基本上这里有三件事加密:
>生成公钥和一对私钥 步骤1只发生一次,您可以为两个客户端(或服务器和客户端)生成公钥(或密钥[RSA])和私钥 在发送数据之前,您需要使用私钥(仅为您知道)和公钥(两者都知道)对数据进行签名,这将创建一个cypertext(或称为摘要),您可以将其发送到相反的位置人(其他客户或服务器).在另一方面,他们用公钥解密cypertext,然后使用他们的私钥来检索实际数据. 这实际上是使用公共私钥进行加密 – 解密的基础知识. 这些加密和解密的各种版本都可用,做维基百科会很有帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |