РЕДАКТИРОВАТЬ: Я обнаружил, что ключи не проблема, как я сказал в комментариях.Я могу без проблем использовать их для шифрования и дешифрования данных в OpenSSL.
Но мне нужно расшифровать строку в OpenSSL, которая ранее была зашифрована с помощью Crypto ++, и она не работает.
Дополнительные подробности я опубликую позже.
Привет, я зашифровал строку, используя открытый ключ RSA, созданный с помощью Crypto ++, и сейчас пытаюсь (пока безуспешно)) для расшифровки через PHP и OpenSSL.
Вот что я делаю:
- Закрытый ключ, который НЕ является base64 или hex-кодом, хранится в файле с именем "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 всегда пуст.
Я не могу понять, почему это не работает.Кто-нибудь заметил, что я делаю не так?