0

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

$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 is not a valid private key in

我必须对密钥文件做些什么吗?它是二进制的。

4

3 回答 3

3

首先,尝试使用 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
于 2013-01-23T23:12:42.930 回答
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,您可以只使用“文件”命令来找出文件类型。(这是假设你有一个 Posix / Linux 系统——你没有说)。

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

于 2013-01-23T23:26:20.340 回答
-2

解决了我只是使用

openssl pkcs8 .....

命令

希望这对其他人有用

于 2013-01-24T17:49:02.510 回答