首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从有DER格式(PKCS8)保护的文件中获取私钥

从有DER格式(PKCS8)保护的文件中获取私钥
EN

Stack Overflow用户
提问于 2015-11-27 02:19:23
回答 1查看 1.7K关注 0票数 2

这是一个新的问题,我试图找到解决办法,但没有成功。

这是我的必需品。用户将使用一堆数据填充表单,并在同一表单中上载2个文件,并为其中一个文件键入密码。

  • 一个文件的私钥格式(PKCS8)受密码保护(用户将键入的文件)。
  • 另一个文件没有密码,具有DER格式(PKCS8)的公钥。

使用此文件中的键,a将对用户在表单中键入的数据进行签名,并生成/下载一个xml文件,其中包含签名。

我知道使用openssl需要格式化,并使用以下命令

代码语言:javascript
复制
“openssl pkcs8 -inform DER private.key -out private.key.pem -passin pass:password”

我可以把文件转换成这种格式。但我有一个限制:

我知道我可以通过一个函数轻松地将DER格式转换为PEM (我已经用带有公钥的文件实现了这一点),但是问题在于其中包含密码的私钥。

出于安全原因,我无法调用exec函数来执行此操作,而且出于同样的原因,我不希望以pem格式存储文件。

是否有一种方法( php库、代码等)可以提取私钥文件的内容,而无需使用openssl或保存新文件?我正在尝试使用像Crypt_RSA这样的其他库,但我还没有找到一个如何使用该库来执行此操作的示例。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-21 02:21:21

这么多年后,我发现自己又遇到了这个问题,但现在我有了答案,而且很简单:

代码语言:javascript
复制
$path_key = 'C:/Private.key';
$key_content = file_get_contents($path_key);
$pem_from_key = '-----BEGIN ENCRYPTED PRIVATE KEY-----' . PHP_EOL
        . chunk_split(base64_encode($key_content), 64, PHP_EOL)
        . '-----END ENCRYPTED PRIVATE KEY-----' . PHP_EOL;
$private_key = openssl_pkey_get_private($pem_from_key, 'password');
openssl_private_encrypt($data_to_encrypt, $encrypted_data, $private_key);

私钥使用密码进行加密/保护,因此,当您从der转换到pem时,必须添加页眉并在页脚上添加“加密”文本,否则它将无法工作。如果私钥未加密/保护,则必须删除页眉和页脚中的“加密”文本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33949423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档