openssl_pkey_get_public函數的使用方法和示例

一、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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JLWEE的頭像JLWEE
上一篇 2025-01-11 16:28
下一篇 2025-01-11 16:28

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python符號定義和使用方法

    本文將從多個方面介紹Python符號的定義和使用方法,涉及注釋、變量、運算符、條件語句和循環等多個方面。 一、注釋 1、單行注釋 # 這是一條單行注釋 2、多行注釋 “”” 這是一…

    編程 2025-04-29

發表回復

登錄後才能評論