PHP - openssl_pkey_export_to_file() 函数


定义用法

openssl_pkey_export_to_file() 函数会将密钥导出到文件中。相关请看 OpenSSL 函数

描述

openssl_pkey_export_to_file() 函数以 PEM 格式保存密钥。PEM 代表隐私增强邮件,它主要存储加密密钥和证书。

语法

openssl_pkey_export_to_file ( mixed $key , string $outfilename [, string $passphrase [, array $configargs ]] ) : bool

参数

参数 描述
key 要导出到文件的密钥。
outfilename outfilename 是要保存 .pem 文件的路径。
passphrase 可用于保护文件的密码。
configargs 参数 configargs 是生成私钥/公钥对时需要提供给函数的配置详细信息。详情如下所述。

参数 configargs

默认情况下,openssl_pkey_new() 使用 openssl.cnf 中存在的配置详细信息。但是使用 configargs 你可以覆盖它们。配置详情如下:

configargs 的 key 类型 key used in openssl.conf 描述
digest_alg string default_md 从 openssl_get_md_methods() 获取的摘要方法。
x509_extensions string x509_extensions 创建 x509 证书时使用的扩展。
req_extensions string req_extensions 创建 CSR 时使用的扩展。
private_key_bits integer default_bits 指定在生成私钥时要使用的位数。
private_key_type integer none 要创建的私有密钥的类型。它可以是 OPENSSL_KEYTYPE_DSA、OPENSSL_KEYTYPE_DH、OPENSSL_KEYTYPE_RSA 或 OPENSSL_KEYTYPE_EC 之一。默认值为 OPENSSL_KEYTYPE_RSA。
encrypt_key boolean encrypt_key 导出的密钥是否加密?
encrypt_key_cipher integer none 密码常量,如 OPENSSL_CIPHER_RC2_40 (integer),OPENSSL_CIPHER_RC2_128 (integer),OPENSSL_CIPHER_RC2_64 (integer),OPENSSL_CIPHER_DES (integer), OPENSSL_CIPHER_3DES (integer) 等。
curve_name string none 此函数返回的曲线名称之一 openssl_get_curve_names()。
config string N/A 您可以根据需要更改 openssl.conf 中的配置,并在此处提供其路径。

返回值

PHP openssl_pkey_export_to_file() 函数如果成功则返回 true,如果失败则返回 false。

PHP 版本

此函数将在 PHP 版本高于 5.0.0 的情况下工作。

示例 1

openssl_pkey_export_to_file() 的工作 -

<?php
   // 创建私钥
   $privkey = openssl_pkey_new();
   openssl_pkey_export_to_file($privkey, 'C:/htdocs/openssl/keytest.pem');
?>

存储在文件 keytest.pem 的详细信息如下 -

-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDaqNK97A+mL9Xu
IDt3rz9yfFUvrLcDEvsDa9JsjQByJVbdRtaNl6nfg91/LfKO8zAeG8srd292jcYk
9MgBhkpMCHvF/QhWjA4IdPLdWHCbYfjF/LHmo/z022/FqTnjQtFws992/ClhZdo6
kpDlU/H2lmbnCwrsqHlqcQ7bzBgC5U5SW0t3A03PSqxQTIFPOHi1Yx1Il5jH/H11
6UXDKogAWsseRpdwVdsCy6Wj3rkybr1pr7CDkHSS49MAvJ4e6xhs+je12lrtyChR
ZTIYLICzEG7a1n0BPGAI1bQcivHXNipUkAYFn221gKRuB+9SQvC3VKbNXy8Oc7N9
HEahD8S3AgMBAAECggEBAKzEU68og7zlcvzxjsskNtd4kb5Xk0rkhlzPprWKO131
TssLm57IxLoMcMh6P3rff5dqkn9HoVRk9LhiiF1cA/xLf7CSGzJ2+ueHsBVgOaks
IeodnVsFG2tEru3YphqAwwdvuBNFblS8q084WzA3waj6cVgAi6MuArEtn3XfruEp
Yryc4Y1I1SB92x4y85tZ/PcomumPH0djKQeuhzy7f7GloJRfdshNENRbkdLc65N5
j8hy7WxMSa0dpJ3ZJMmgNfek9nALntSZfOsHGMZ/Wog8eV6+HzCwqqrMkR15pZI1
HqvVszU1iwoUJvlGoxInJOqJ2c6lBSBOBBR8DuuQixECgYEA+8RKXcw0U3VU8zJO
NTFzSDEtFYKZ5Bg4IPaYSTSo/ojiL3VrLeocRq3/2zdeCw8wx9eNZbcBW93lWVxK
q2G0X4XgonorEEONBvL9aE/D7wBCMYPWDXd/KQVZW8CPwcy10g2oIi3SqbcTQ/gT
fcmcHAQD2wVgo9XBlg24ESAP01MCgYEA3lYGasOvDweca5GCiP4m1oOH605haIUU
f5CDWXbZ6QjcoUQQB0CoDtTl3QpBd3KGbd+PbqU8xb44+LhrVIsjUyZs6k+eLACe
Dufzq00mIRSl/TZ0R3q17lAMmxId9QramDScpmqqqXonpOpdEoonThynhLyANgX3
eYGLXeqaII0CgYBPVi/JFwx2MEcwy+1xPcACQ9zdJmawRiGJ4atjhkCq1R/RrMK1
mUyHyVUTE4ODIKpSj05zexPmiyo22qp9DzDz2RBMowrm+SJ7yh6ovFoV+pLhX5YY
cEuV9aWPEEM84vF42+zbuGzmJlbf2FDsFpgnC+zbG/q0Jiv2ySPz4ZKbGQKBgQDM
ek9ih1+LshNAts1Xkm5DoSoy1Z4uUx48B7tVX0If2N+YjRE0qlklctWIiXMWGMTb
bdzrBJq0vjKFRI6pbWFqio9mmxy8GUFEMjzekZB8ohHao+cjCg8iAorlXy8f+wB5
NQHQ547XWRn2yPgaIebuJtpF8Fr11Fz6aZK0KBvhzQKBgGRwuxq6IhIROupoDRpU
RHuqICeQQYcf7Cfk7+ZyYJnA1fbOowj4Q5zvbWa6N2Ygyq2KIl0P5YL4Atb7aRKS
e6ol8lIKZM9ysbS+wR0OhhTJs/9CqpgvDbYNQFiaVZtGRpSNCxHkhn0cAR7lzK4P
ROQC7p9zXJhAmzE8/hTD9eaH
-----END PRIVATE KEY-----

示例 2

要从 .pem 文件获取密钥 -

<?php
   // 创建私钥
   $privkey = openssl_pkey_new();
   openssl_pkey_export_to_file($privkey, 'C:/htdocs/openssl/keytest.pem');
    
   // 使用带有私钥的.pem文件。
   $testprivatekey = openssl_get_privatekey(file_get_contents('C:/htdocs/openssl/keytest.pem'));
   if ($testprivatekey === false) {
      var_dump(openssl_error_string());
   } else {
      // var_dump($testprivatekey);
      $key_details = openssl_pkey_get_details($testprivatekey);
      print_r($key_details["key"]);    
   }
?>

文件 test-csr1.pem 存储的详细信息如下 -

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnbGAblUCP6sZvbi2JM4G
PcLmKK9flGQq6EE+yvMWrEUnIPGOLJUEB06dE8inIMQTYDmdmjn7HgUAlIDaViw+
aSv3XBZJqBTm7xtW4488oKuCzdBuJbnomtGttFWOk4cjb8kG+Kza6v0AB+P0eUru
cPkwnJF4F1pGY1pszSMsL3/s7OcIzjiKUKu5vHJxUWO7baVovq+gv9+O24Pd0GhB
t6RC/pgK/42YqZ2YW5V+JiuCFFkTVPusviunAOLLpDwoyPIROvXdML2TKopiowOd
nmOkNRrW81duRF8Z4dcn7jnf2sKExpLBgAtcV05OufZIv3VeeTD0ISbCJhn0zmx/
SQIDAQAB
-----END PUBLIC KEY-----