編集:コメントで言ったように、キーが問題ではないことがわかりました。それらを問題なく使用して、OpenSSL でデータを暗号化および復号化できます。
しかし、Crypto++ を介して以前に暗号化された OpenSSL 上の文字列を復号化する必要があり、それは機能していません。
後で追加の詳細を投稿します。
こんにちは、Crypto++ で生成された RSA 公開鍵を使用して文字列を暗号化しましたが、PHP と OpenSSL を介して復号化しようとしています (まだ失敗しています)。
それが私がやっていることです:
- base64 または 16 進数でエンコードされていない秘密鍵は、「rsa-private.key」というファイルに保存されます。
- 暗号化されたメッセージは「message.txt」に保存されます (16 進数でエンコード)
ステップ 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 は常に空です。
なぜ機能しないのかわかりません。私が間違っていることに気づいた人はいますか?