如何在 php 中使用 openssl 以正确的格式提取公钥


How to extract public key in proper format using openssl in php?

我已经使用不同的方式进行了多次尝试,使用php中的openssl以可显示的格式提取公钥。例如

print_r(openssl_pkey_get_details(openssl_csr_get_public_key(''path to csr(((;

var_dump(openssl_get_publickey(file_get_contents('''path to cert'))); 

等等。但我能得到的只是这样的东西:

-----开始公钥-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClNami19DpcxlYAaZNxHV27r2V gDQbkZhiayaDfcwjYStRaU8Hk1yg76gfhgayssIa6Y7Cek4uH5fV PE6Nj/s9QAkcvpzZDJasdYmj8BGyVwVbRelToMNvXTc eNaH93Dm+OA4TE9yoQIDAQAB

-----结束公钥

-----

如何以以下格式提取它:

95 AE 9A 4E DB F1 6D 15 55 9F 86 52 28 54 21 3F88 1b 21 81 2a 01 e3 35 dd 21 51 44 f4 18 BF 85FB F0 6A 9A 9C 15 7F 46 83 B8 1E 05 B7 B9 1A9d fd 58 0b fa 45 01 f2 3b 3b bc 1b f6 a3 20 7b96 3E F7 5D D6 C2 A7 56 29 02 94 BA 0C 29 DA 51

谢谢。

浏览器列出的公钥只是模数的十六进制编码。在 openssl_pkey_get_details 返回的数据结构中,这由 n 表示。(如果你想知道为什么,请查看RSA算法。要在PHP中获取它,只需执行以下操作:

$pkey_details = openssl_pkey_get_details(openssl_pkey_get_public(file_get_contents("test.pem")));
echo bin2hex($pkey_details["rsa"]["n"]);