将.key转换为.pem

时间:2013-01-23 23:08:18

标签: php encryption key private

我需要使用私钥进行加密,并且我尝试使用以下代码进行加密:

$content = file_get_contents("file.key");

$plaintext = "14d9df79-8c4c-4380-8444-d31e1fd3f78a";

openssl_private_encrypt($plaintext, $encrypted, $content);

$transfer = base64_encode($encrypted);

echo "text encrypted is:" . $transfer;  //encrypted string

我收到错误: openssl_private_encrypt():key param不是

中的有效私钥

我是否必须对密钥文件执行某些操作?它是二进制的。

3 个答案:

答案 0 :(得分:2)

首先,尝试使用openssl将密钥转换为PEM格式:

openssl rsa -inform der -in file.key -outform pem -out filekey.pem

接下来,使用openssl_pkey_get_private

从PEM文件中提取私钥
$key = openssl_pkey_get_private(file_get_contents("filekey.pem"));

$plaintext = "14d9df79-8c4c-4380-8444-d31e1fd3f78a";

openssl_private_encrypt($plaintext, $encrypted, $key);

$transfer = base64_encode($encrypted);

echo "text encrypted is:" . $transfer;  //encrypted string

答案 1 :(得分:2)

我不知道使用.key扩展名的任何x509文件格式。有pem(你需要加载到openssl中的格式),DER(文件可能有.der,.crt或.cer扩展名)或PKCS#12(.pfx .p12)。它可能是 DER或PKCS#12:

 openssl pkcs12 -in file.key -out file.pem -nodes

...将PKCS#12转换为file.pem,

openssl x509 -inform der -in file.key -out file.pem

...转换DER文件。如果文件格式错误,他们会报错。 OTOH你可以使用'file'命令找出文件类型。 (假设你有一个Posix / Linux系统 - 你没有说过。)

或者你可以问问给你的人是什么格式。

答案 2 :(得分:-1)

解决 我只是用

openssl pkcs8 .....

命令

希望这对其他人有用