РЕДАКТИРОВАТЬ: я обнаружил, что проблема не в ключах, как я сказал в комментариях. Я могу без проблем использовать их для шифрования и дешифрования данных в OpenSSL.
Но мне нужно расшифровать строку в OpenSSL, которая ранее была зашифрована с помощью Crypto ++, и это не работает.
Я опубликую дополнительную информацию позже.
Привет, я зашифровал строку с помощью открытого ключа RSA, сгенерированного с помощью Crypto ++, и теперь пытаюсь (все еще безуспешно) расшифровать ее через PHP и OpenSSL.
Вот что я делаю:
- Закрытый ключ, НЕ закодированный в формате base64 или шестнадцатеричный, хранится в файле с именем "rsa-private.key"
- Зашифрованное сообщение хранится в "message.txt" (в шестнадцатеричной кодировке).
ШАГ 1. Загрузите закрытый ключ через: $key = file_get_contents("rsa-private.key");
ШАГ 2: Преобразуйте ключ в формат PEM, используя следующую функцию:
<?php
function pkcs8_to_pem($der) {
static $BEGIN_MARKER = "-----BEGIN PRIVATE KEY-----";
static $END_MARKER = "-----END PRIVATE KEY-----";
$value = base64_encode($der);
$pem = $BEGIN_MARKER . "\n";
$pem .= chunk_split($value, 64, "\n");
$pem .= $END_MARKER . "\n";
return $pem;
}
$PEMprivatekey = pkcs8_to_pem($key);
?>
(stackoverflow.com/questions/1357569/)
ШАГ 3: Подготовьте ключ для дальнейшего использования OpenSSL: (без проблем)
<?php
$privateKey = openssl_get_privatekey($PEMprivatekey);
if (!$privateKey) {
echo "Cannot get public key";
}
?>
ШАГ 4. Получите сообщение и расшифруйте его, используя следующую функцию:
<?php
function hex_to_str($hex){
for ($i=0; $i < strlen($hex)-1; $i+=2) {
$string .= chr(hexdec($hex[$i].$hex[$i+1])); }
return $string;
}
$message = file_get_contents("message.txt");`
$encryptedstring = hex_to_str($message);
?>
ШАГ 5: Расшифровать строку: (не работает)
<?php
openssl_private_decrypt($encryptedstring, $decrypteddata, $privateKey);
if (!$decrypteddata) {
echo "........"; } else { echo $decrypteddata; }
?>
$ decrypteddata всегда пуст.
Я не могу понять, почему это не работает. Кто-нибудь заметил, что я делаю не так?
openssl_error_string
, чтобы увидеть, есть ли ошибки. ваш сценарий Step 4 получил `(но я думаю, это единственная ошибка форматирования SO) - person teemitzitrone   schedule 19.10.2010padding
наopenssl_private_decrypt
? php.net/manual/en/function.openssl-private- decrypt.php - person teemitzitrone   schedule 19.10.2010