Получить параметр ключа не является допустимой ошибкой открытого ключа в openssl_public_encrypt ()

$ publicKey = "../ssh/public/pub"; $ plaintext = "Строка для шифрования";

$pubKey = openssl_pkey_get_public($publicKey);

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

echo $encrypted;   //encrypted string

приведенный выше код генерирует следующую ошибку

openssl_public_encrypt () [http://php.net/function.openssl-public-encrypt]: параметр ключа не является допустимым открытым ключом [APP / controllers / supportservice_controller.php, строка 144]

Я создал ключи с помощью openssl, используя:

сгенерируйте 1024-битный закрытый ключ rsa, запросите парольную фразу для его шифрования и сохраните в файл openssl genrsa -des3 -out / path / to / privatekey 1024

сгенерировать открытый ключ для закрытого ключа и сохранить в файл

openssl rsa -in / путь / к / privatekey -pubout -out / путь / к / publickey


person poojitha    schedule 17.09.2013    source источник


Ответы (4)


В моем случае «Я разделил открытый ключ на несколько строк», проблема была решена.

Версия PHP 7.1.17

    $publicKey = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($publicKey, 64, "\n", true) . "\n-----END PUBLIC KEY-----";

    $str = "str to be encrypted";

    $opensslPublicEncrypt = openssl_public_encrypt($str, $encrypted, $publicKey);
person 严水发    schedule 25.07.2019
comment
см. этот открытый ключ недействителен - person 严水发; 25.07.2019

В PHP 7.x и новых версиях phpseclib (чистая реализация PHP RSA) и с помощью композитора для установки phpseclib вы можете сделать следующее:

    # Install the phpseclib from console
    composer require phpseclib/phpseclib:~2.0
    // In your php script:

    use phpseclib\Crypt\RSA;

    $rsa = new RSA();
    $rsa->loadKey($publicKey); # $publicKey is an string like "QEFAAOCAQ8AMIIBCgKCAQEAoHcbG....."
    $plaintext = '...';
    $ciphertext = $rsa->encrypt($plaintext);

    var_dump($ciphertext);

    #to decrypt:
    $rsa->loadKey('...'); // private key
    echo $rsa->decrypt($ciphertext);```



person herohat    schedule 26.01.2019

Открытый ключ должен быть заключен в сертификат X.509 при использовании функций OpenSSL в PHP. Вы можете создать это с помощью CSR. Или вы можете использовать phpseclib, чистую реализацию PHP RSA и напрямую использовать необработанный открытый ключ . например.

<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();
$rsa->loadKey('...'); // public key

$plaintext = '...';

//$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = $rsa->encrypt($plaintext);
person neubert    schedule 18.09.2013

Таким образом вы можете добавить свой ключ и зашифровать текст

  $data = json_decode(file_get_contents('php://input'), true);
  $enctext = $data['enctext'];

  $pubkey = '-----BEGIN PUBLIC KEY-----
             PUBLIC  KEY PLACED HERE
             -----END PUBLIC KEY-----';

  openssl_public_encrypt($enctext, $crypted, $pubkey);
  $data['enctext'] =  $enctext;
  $data['Encryption_text'] = base64_encode($crypted);
  echo json_encode($data);
  exit;

Или вместо этого вы также можете вызвать файл открытого ключа .cert

  $fp=fopen("publickey.crt","r"); 
  $pub_key_string=fread($fp,8192); 
  fclose($fp); 
  $key_resource = openssl_get_publickey($pub_key_string); 

  openssl_public_encrypt($enctext, $crypted, $key_resource );
  $data['enctext'] =  $enctext;
  $data['Encryption_text'] = base64_encode($crypted);
  echo json_encode($data);
  exit;
person Kashyap Patel    schedule 10.04.2018