这是一个新的问题,我试图找到解决办法,但没有成功。
这是我的必需品。用户将使用一堆数据填充表单,并在同一表单中上载2个文件,并为其中一个文件键入密码。
使用此文件中的键,a将对用户在表单中键入的数据进行签名,并生成/下载一个xml文件,其中包含签名。
我知道使用openssl需要格式化,并使用以下命令
“openssl pkcs8 -inform DER private.key -out private.key.pem -passin pass:password”我可以把文件转换成这种格式。但我有一个限制:
我知道我可以通过一个函数轻松地将DER格式转换为PEM (我已经用带有公钥的文件实现了这一点),但是问题在于其中包含密码的私钥。
出于安全原因,我无法调用exec函数来执行此操作,而且出于同样的原因,我不希望以pem格式存储文件。
是否有一种方法( php库、代码等)可以提取私钥文件的内容,而无需使用openssl或保存新文件?我正在尝试使用像Crypt_RSA这样的其他库,但我还没有找到一个如何使用该库来执行此操作的示例。
任何帮助都将不胜感激。
发布于 2021-03-21 02:21:21
这么多年后,我发现自己又遇到了这个问题,但现在我有了答案,而且很简单:
$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时,必须添加页眉并在页脚上添加“加密”文本,否则它将无法工作。如果私钥未加密/保护,则必须删除页眉和页脚中的“加密”文本。
https://stackoverflow.com/questions/33949423
复制相似问题