一、openssl_pkey_get_public函数简介
openssl_pkey_get_public函数是OpenSSL中的一个函数,用于获取由私钥生成的公钥。它的参数是一个包含私钥的字符串或资源。
二、使用openssl_pkey_get_public函数生成公钥
使用openssl_pkey_get_public函数生成公钥需要按照以下步骤进行:
1、首先,我们需要生成一个私钥。下面是一个生成RSA私钥的代码示例:
$private_key = openssl_pkey_new(array( 'private_key_type' => OPENSSL_KEYTYPE_RSA, 'bits' => 2048, )); openssl_pkey_export($private_key, $private_key_str);
2、接着,我们使用openssl_pkey_get_public函数来生成公钥,并将生成的公钥存储到一个字符串变量中:
$public_key = openssl_pkey_get_public($private_key); openssl_pkey_export($public_key, $public_key_str);
3、通过以上两个步骤,我们就得到了一个由RSA私钥生成的公钥。
三、使用openssl_pkey_get_public函数验证签名
openssl_pkey_get_public函数也可以用于验证签名的有效性。具体的验证过程如下:
1、首先,我们需要生成一对RSA公私钥,并使用私钥对数据进行签名。下面是一个生成RSA公私钥并签名的代码示例:
$private_key = openssl_pkey_new(array( 'private_key_type' => OPENSSL_KEYTYPE_RSA, 'bits' => 2048, )); openssl_pkey_export($private_key, $private_key_str); $data = "hello world"; openssl_sign($data, $signature, $private_key, OPENSSL_ALGO_SHA256);
2、接着,我们使用openssl_pkey_get_public函数获取公钥,并使用公钥来验证签名的有效性:
$public_key = openssl_pkey_get_public($private_key); $result = openssl_verify($data, $signature, $public_key, OPENSSL_ALGO_SHA256); if ($result == 1) { echo "Signature is valid."; } else { echo "Invalid signature."; }
通过以上两个步骤,我们就可以验证签名的有效性。
四、使用openssl_pkey_get_public函数解析PEM格式的公钥
除了可以生成公钥和验证签名的有效性外,openssl_pkey_get_public函数还可以用于解析PEM格式的公钥。PEM格式的公钥通常存储在独立的.pem文件中,例如:
-----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2y2QuQqLuZ9OxI3qOpwC zYB1ocxCGVTnLgkR2Hf/4xIcY5ixHvHHszluZXt5VJb9IKfihI6qK/mqMAefKzY0 tpgjNv2Tay2ErR7JhJ/YrDWa94um20NuEwBSJ2n5Zqw9VrvJz5PmeZPQspW5yUoV N9OwJjfBub1a+Ws8yj1RkDcJFp3XC3+vsl4AGdDhOqnI+sfNS33Vsh/p8rNt/qeK H89LmVZny81eyqRNarnV/Fwj1zbu8KCO1NpTPCoeQpjO/AdzZtEswFhHaH0W0HgE eNwA4dSjG3ZTOnJZi4SZhJwNplw+tx+1jE6IfzNEz8ljfZYcXwc8hEB7NBRfmu6D VlSxls1DYzy7zLpK6CXcYPt9vqZR15CRaNWbv0p5vma3K9Y//n5FYNVpjfvJPNcF B5NlkoV7PEsr3X8jDvLyF7MCuA+BLx+RYD1IMVZd7GGkKrycsoZPgqB05THn1HtW tFfOZP4qdNXymGOD7B7Johv4GLZgQU2bAyTmPitDhvvzF9zvxsqOAFjVySfogKY/ 7WWTf/AIH3lQ5r/5K25jw8e7dbWjt4RfTCjzqf2+1YG/Mf1JnsA3oW+Uc5szQAnC w6zS1cP9qh2M0S/tzwyBvzZyI+wRlW4Bl7UQ0zkVRvAN7vMO1B674iFTg4d2G9+i 8S8C/IvE+bshFLpE+UjRrX0CAwEAAQ== -----END PUBLIC KEY-----
以下是使用openssl_pkey_get_public函数解析PEM格式的公钥的代码示例:
$public_key_pem = "-----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2y2QuQqLuZ9OxI3qOpwC zYB1ocxCGVTnLgkR2Hf/4xIcY5ixHvHHszluZXt5VJb9IKfihI6qK/mqMAefKzY0 tpgjNv2Tay2ErR7JhJ/YrDWa94um20NuEwBSJ2n5Zqw9VrvJz5PmeZPQspW5yUoV N9OwJjfBub1a+Ws8yj1RkDcJFp3XC3+vsl4AGdDhOqnI+sfNS33Vsh/p8rNt/qeK H89LmVZny81eyqRNarnV/Fwj1zbu8KCO1NpTPCoeQpjO/AdzZtEswFhHaH0W0HgE eNwA4dSjG3ZTOnJZi4SZhJwNplw+tx+1jE6IfzNEz8ljfZYcXwc8hEB7NBRfmu6D VlSxls1DYzy7zLpK6CXcYPt9vqZR15CRaNWbv0p5vma3K9Y//n5FYNVpjfvJPNcF B5NlkoV7PEsr3X8jDvLyF7MCuA+BLx+RYD1IMVZd7GGkKrycsoZPgqB05THn1HtW tFfOZP4qdNXymGOD7B7Johv4GLZgQU2bAyTmPitDhvvzF9zvxsqOAFjVySfogKY/ 7WWTf/AIH3lQ5r/5K25jw8e7dbWjt4RfTCjzqf2+1YG/Mf1JnsA3oW+Uc5szQAnC w6zS1cP9qh2M0S/tzwyBvzZyI+wRlW4Bl7UQ0zkVRvAN7vMO1B674iFTg4d2G9+i 8S8C/IvE+bshFLpE+UjRrX0CAwEAAQ== -----END PUBLIC KEY-----"; $public_key = openssl_pkey_get_public($public_key_pem); openssl_pkey_export($public_key, $public_key_str);
通过以上步骤,我们就可以将PEM格式的公钥转换为字符串格式的公钥。
原创文章,作者:JLWEE,如若转载,请注明出处:https://www.506064.com/n/317988.html