一、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/zh-hk/n/317988.html