Intereting Posts
Amazon SES Ошибка получения учетных данных с сервера метаданных профиля экземпляра. (Ошибка клиента: 404) Как использовать строку в качестве пути индекса массива для получения значения? Правильное предотвращение захвата сеанса в PHP Как создать папку с PHP-кодом? Если текущее время превышает 30 секунд за прошлый промежуток времени X (из базы данных) PHP Печать неопределенного дерева категорий PHP: Как получить атрибут из массива JSON? Структура PHP для социальных сетей Amazon MWS API w / PHP: альтернатива getFeedSubmissionResult Получение динамического вывода HTML из другой страницы на сервере (возможно, file_get_contents) Paginate Динамически созданная таблица в Cakephp? В PHP с PDO, как проверить окончательный SQL-запрос с параметризацией? exception_handling -> не такой надежный, как просто ошибка регистрации? Как я могу динамически добавлять поля ввода в форму? Postgresql regexp_matches внутри представления всегда возвращает null при запросе из PHP

удаление пароля из закрытого ключа rsa

Вот как я сделал бы это с phpseclib (который работает):

<?php include('Crypt/RSA.php'); $rsa = new Crypt_RSA(); $rsa->setPassword('password'); $result = $rsa->loadKey('-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,E3B1C06E0D0C2633 gvmXzl6W7eV1a3N5rQNwBWKY9on3IgxZudS33cip5f88FotsPSDJMvqj6LVw2RxobDjhlOOzqmTb VrlTnoQ6CogXFZSfiPmixiyyptCUEKJkSiEhYGM5GQm0OoGcLeLbgBb9tRpWh5IlXulKD6XFhx8q /eGg5a+mSkX1i7kv2+Ih3jHmEKwrnfzhcA29pBF3OQJo+Ks9IYneuk676pHtsIs7CpFKq1tDvD8Q O7URxnVnHLltaFvIxshqyZu92xbUYZR7YzjXl5+3w4TVgeAHUogEV+H9iZTosD/copUsbQO+78w2 E1D3iDS94wRgx0Tjv4xlwrTpOV38FS5rdL32492DcCRlCYM4VtuwjYeWi5shJg69jCb0EwGRqfAo xko+lbKWELTuFKwD7n1rc/2fTarbGuf8S2AEggBLZyfXHC/9N84mXLFO2XKq+0WdiEFhQj2Cze+a 9qcSK6tPSrjK1LPlnOOppFgDElZaZ0rxsgjtiWSIAEw/Ad+SIM5u+vqwzF8J317JlsdKoBFDw8mS MxCMuMksKJ23mgvY+THRIVgH3E7lEDZQzCi1Uy6ldLJcran/6wHwP88pVM2odiHkpnrJGcEBbbIk qsxJZhFT8aUt/cUEBj3fnP7cxoNLQfTHMPqUTqKBWaVufFzGU9YB1R+XWFULLddwJHnV7gPheBlk MDapowb+Is77+a9Y2VDsOXEvNpqTY0giiSrckG05IZnrhJ24JnSCwyNd99lm7XKdEGGrjBCMqIyI Fqox8Ahkv3KWAJPYK1eOCc5d/KwZHlnlFJq7ZYy9u3fEnxQCjOEmeXLkLangKA== -----END RSA PRIVATE KEY-----'); echo $result ? 'true' : 'false'; ?> 

Для сравнения, однако, я пытаюсь сделать это с помощью OpenSSL. Вот мой код:

 <?php $pkey = openssl_pkey_get_private('-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,E3B1C06E0D0C2633 gvmXzl6W7eV1a3N5rQNwBWKY9on3IgxZudS33cip5f88FotsPSDJMvqj6LVw2RxobDjhlOOzqmTb VrlTnoQ6CogXFZSfiPmixiyyptCUEKJkSiEhYGM5GQm0OoGcLeLbgBb9tRpWh5IlXulKD6XFhx8q /eGg5a+mSkX1i7kv2+Ih3jHmEKwrnfzhcA29pBF3OQJo+Ks9IYneuk676pHtsIs7CpFKq1tDvD8Q O7URxnVnHLltaFvIxshqyZu92xbUYZR7YzjXl5+3w4TVgeAHUogEV+H9iZTosD/copUsbQO+78w2 E1D3iDS94wRgx0Tjv4xlwrTpOV38FS5rdL32492DcCRlCYM4VtuwjYeWi5shJg69jCb0EwGRqfAo xko+lbKWELTuFKwD7n1rc/2fTarbGuf8S2AEggBLZyfXHC/9N84mXLFO2XKq+0WdiEFhQj2Cze+a 9qcSK6tPSrjK1LPlnOOppFgDElZaZ0rxsgjtiWSIAEw/Ad+SIM5u+vqwzF8J317JlsdKoBFDw8mS MxCMuMksKJ23mgvY+THRIVgH3E7lEDZQzCi1Uy6ldLJcran/6wHwP88pVM2odiHkpnrJGcEBbbIk qsxJZhFT8aUt/cUEBj3fnP7cxoNLQfTHMPqUTqKBWaVufFzGU9YB1R+XWFULLddwJHnV7gPheBlk MDapowb+Is77+a9Y2VDsOXEvNpqTY0giiSrckG05IZnrhJ24JnSCwyNd99lm7XKdEGGrjBCMqIyI Fqox8Ahkv3KWAJPYK1eOCc5d/KwZHlnlFJq7ZYy9u3fEnxQCjOEmeXLkLangKA== -----END RSA PRIVATE KEY-----', 'password'); if ($pkey === false) exit('FAILURE'); openssl_pkey_export($pkey, $out_key_file); echo $out_key_file; ?> 

Только проблема: код умирает преждевременно, эхо из-за ошибки. то есть. openssl_pkey_get_private () не загружает ключ. openssl_error_string говорит: «Ошибка: 0906D066: подпрограммы PEM: PEM_read_bio: плохая конечная строка».

Есть идеи?

Solutions Collecting From Web of "удаление пароля из закрытого ключа rsa"

Я не уверен, что здесь происходит; Я пробовал ваш код, и он дает ту же проблему, поэтому я сам сгенерировал ключ:

 openssl genrsa -des3 -out des3.rsa 

Затем скопировали содержимое в этот скрипт:

 $out_key_file = 'des3nopass.rsa'; $key = <<<EOS -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,5F2FDB4C8F710F92 pkaBIMCdnvrejw6egagg/lGrrGJWLsceDkC0KSdouRfR8LhQS/XjSJ/Wqrj7fa36 xXRd/USBebgy2hLAi9RMPofOjlcUyUVvZZgh0+JDQ79pH5q1FsRMcsJ+J8GO0edw kh8zdZoCbbtJgQjTx0JheJMDdZymw4cfK5hoZbnxX6HZ1wNhtPb7Z/noNcxpK6Zl CCzPgLd9hCGLBD2XqoRjOM1U2vpZwpCTdYgAtFIPMVXQQpzgIyw06CHcHvYZgnAc oxiVx7Z7N9r0J1vDnlrW/OU1l07D0pBr1yPRTDMI5tBMo8KDsL2tkBxqtYyOJdZr as/5zQDPRlbW7Jve1JuXmsnja+gN7jZ+3LpUzfRFo/wWnvOzhHQxLz+RaUpVDYTl F4m9zjo9dgOhlZzigOhYTB+5aq5f92Yf6K0daCwTDpU= -----END RSA PRIVATE KEY----- EOS; $pkey = openssl_pkey_get_private($key, 'password'); if ($pkey === false) { die(openssl_error_string()); } openssl_pkey_export($pkey, $out_key_file); echo "Wrote to $out_key_file\n"; 

И это отлично работает для меня.

Обновить

Я попытался выполнить это с помощью командной строки openssl , используя ваш ключ:

 openssl rsa -in des3big.rsa -out des3bignopass.rsa unable to load Private Key 14179:error:0906D066:PEM routines:PEM_read_bio:bad end line:pem_lib.c:746: 

Кажется, что OpenSSL также имеет проблемы с этим, поэтому это не PHP.

Обновление 2

Оказывается, что ваши строки слишком длинны (ширина символов должна быть 64 символа):

 -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,E3B1C06E0D0C2633 gvmXzl6W7eV1a3N5rQNwBWKY9on3IgxZudS33cip5f88FotsPSDJMvqj6LVw2Rxo bDjhlOOzqmTbVrlTnoQ6CogXFZSfiPmixiyyptCUEKJkSiEhYGM5GQm0OoGcLeLb gBb9tRpWh5IlXulKD6XFhx8q/eGg5a+mSkX1i7kv2+Ih3jHmEKwrnfzhcA29pBF3 OQJo+Ks9IYneuk676pHtsIs7CpFKq1tDvD8QO7URxnVnHLltaFvIxshqyZu92xbU YZR7YzjXl5+3w4TVgeAHUogEV+H9iZTosD/copUsbQO+78w2E1D3iDS94wRgx0Tj v4xlwrTpOV38FS5rdL32492DcCRlCYM4VtuwjYeWi5shJg69jCb0EwGRqfAoxko+ lbKWELTuFKwD7n1rc/2fTarbGuf8S2AEggBLZyfXHC/9N84mXLFO2XKq+0WdiEFh Qj2Cze+a9qcSK6tPSrjK1LPlnOOppFgDElZaZ0rxsgjtiWSIAEw/Ad+SIM5u+vqw zF8J317JlsdKoBFDw8mSMxCMuMksKJ23mgvY+THRIVgH3E7lEDZQzCi1Uy6ldLJc ran/6wHwP88pVM2odiHkpnrJGcEBbbIkqsxJZhFT8aUt/cUEBj3fnP7cxoNLQfTH MPqUTqKBWaVufFzGU9YB1R+XWFULLddwJHnV7gPheBlkMDapowb+Is77+a9Y2VDs OXEvNpqTY0giiSrckG05IZnrhJ24JnSCwyNd99lm7XKdEGGrjBCMqIyIFqox8Ahk v3KWAJPYK1eOCc5d/KwZHlnlFJq7ZYy9u3fEnxQCjOEmeXLkLangKA== -----END RSA PRIVATE KEY----- 

Можете найти дополнительную информацию, изучив причину ошибки:

 if ($pkey === false) { echo openssl_error_string(); exit('FAILURE'); } 

Изменить: с учетом ошибки «PEM_read_bio: плохая конечная строка» вот часть источника OpenSSL, которая запускает:

 [...] if ((strncmp(buf,"-----END ",9) != 0) || (strncmp(nameB->data,&(buf[9]),i) != 0) || (strncmp(&(buf[9+i]),"-----\n",6) != 0)) { PEMerr(PEM_F_PEM_READ_BIO,PEM_R_BAD_END_LINE); goto err; } [...] 

Глядя на ваш код, я подозреваю, что вам понадобится символ новой строки, добавленный в конец строки закрытого ключа.