PHP中RSA保存在PEM文件中,直接读取就可以用,为什么要用openssl_pkey_get_private这样的函数来加载?

发布于 2022-09-06 22:52:33 字数 100 浏览 16 评论 0

以私钥来说,存的pem文件,打开就是ASC码的字符。直接file_get_contents得到就可以用了,为什么要用openssl_pkey_get_private来读成资源型的数据呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暗恋未遂 2022-09-13 22:52:33

在加密解密时,确实可以直接用file_get_contents的方式读取key

不过openssl_pkey_get_private还是有用的,比如从私钥中提取公钥:

<?php
$privateKey = openssl_get_privatekey('private.key');
$detail = openssl_pkey_get_details($privateKey);
$publicKeyString = $detail['key'];
echo $publicKeyString;

其中的 openssl_pkey_get_details 就需要传入资源类型的私钥。

还有就是效率问题,如果加密时每次读取的文本格式的密钥,那 OpenSSL 每次还要为你解析一遍密钥。比较下面的两个加密方法就可以看出效率上的差异了。

<?php
// 方法1:读取密钥到资源
$s = time();
$key = openssl_get_privatekey(file_get_contents('private.key'));
for ($i = 0; $i !== 5000; $i++) {
    openssl_private_encrypt('hello world', $encrypted, $key);
}
echo time() - $s . PHP_EOL;

// 方法2:每次加密直接读取文本
$s = time();
$key = file_get_contents('private.key');
for ($i = 0; $i !== 5000; $i++) {
    openssl_private_encrypt('hello world', $encrypted, $key);
}
echo time() - $s . PHP_EOL;

实验结果可以发现方法2要比方法1来得慢。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文