猿问

PHP: openssl_private_decrypt(): 密钥参数不是有效的私钥

我有这个代码来创建RSA 4096公钥和私钥来加密和解密字符串。


法典:


<?php

$config = array(

    "config" => "C:/xampp/php/extras/openssl/openssl.cnf",

    "private_key_bits" => 4096,

    "private_key_type" => OPENSSL_KEYTYPE_RSA

);


// Create the private and public key

$res = openssl_pkey_new($config);


// Extract the private key from $res to $privKey

openssl_pkey_export($res, $privKey);


// Extract the public key from $res to $pubKey

$pubKey = openssl_pkey_get_details($res);

$pubKey = $pubKey["key"];


$data = 'Hello, World!';


// Encrypt the data to $encrypted using the public key

openssl_public_encrypt($data, $encrypted, $pubKey);


echo $encrypted;


// Decrypt the data using the private key and store the results in $decrypted

openssl_private_decrypt($encrypted, $decrypted, $privKey);


echo $decrypted;

?>

它创建密钥,加密字符串 (),但当尝试解密字符串时,会发生错误:dataHello, World!encrypted


警告:openssl_private_decrypt(): 在第 26 行的 C:\xampp\htdocs\rsa\index.php 密钥参数不是有效的私钥


慕森卡
浏览 573回答 2
2回答

慕莱坞森

好吧,这对我有用:更改为 。openssl_pkey_export($res, $privKey);openssl_pkey_export($res, $privKey, NULL, $config);

RISEBY

您不需要像这样导出密钥私有,至少在将其保存在安全的地方之前是这样:$config = array(&nbsp; &nbsp; "private_key_bits" => 4096,&nbsp; &nbsp; "private_key_type" => OPENSSL_KEYTYPE_RSA);$pki&nbsp; &nbsp; &nbsp;= openssl_pkey_new($config);$public&nbsp; = openssl_pkey_get_public(&nbsp; &nbsp; openssl_pkey_get_details($pki)['key']); // why on earth did they implement it like this? so clunky.$private = openssl_pkey_get_private($pki);$data = 'Hello, World!';openssl_public_encrypt($data, $encrypted, $public);openssl_private_decrypt($encrypted, $decrypted, $private);var_dump(&nbsp; &nbsp; bin2hex($encrypted),&nbsp; &nbsp; $decrypted);
随时随地看视频慕课网APP
我要回答