php – 混淆了API签名的公钥和私钥对

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 混淆了API签名的公钥和私钥对脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个需要使用签名请求进行授权的API.

我正在使用PHP oPEnssl_sign和openssl_verify函数.
我理解公钥和私钥的概念(DSA算法).但基本上我不知道如何实现它.

我是从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 signature\n";
}

$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 signature\n";
}
?>

但我很想知道如何将其实现为URI请求.

在http get请求中使用私钥和公钥似乎很大,客户端如何能够生成可由服务器验证的签名?

解决方法

基本上这里有三件事加密:

>生成公钥和一对私钥
>使用私钥1和公钥加密数据
>使用公钥和私钥2解密数据

步骤1只发生一次,您可以为两个客户端(或服务器和客户端)生成公钥(或密钥[RSA])和私钥

在发送数据之前,您需要使用私钥(仅为您知道)和公钥(两者都知道)对数据进行签名,这将创建一个cypertext(或称为摘要),您可以将其发送到相反的位置人(其他客户或服务器).在另一方面,他们用公钥解密cypertext,然后使用他们的私钥来检索实际数据.

这实际上是使用公共私钥进行加密 – 解密的基础知识.

这些加密和解密的各种版本都可用,做维基百科会很有帮助.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 混淆了API签名的公钥和私钥对全部内容,希望文章能够帮你解决php – 混淆了API签名的公钥和私钥对所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。