私はまったく同じ問題を抱えていました。その後、質問をグーグルで検索し、私が尋ねたのと同じ質問でここにたどり着きました。そのため、他の場所を検索する必要がありました。
この記事は、公式の php ドキュメントの欠点を説明するのに役立ちました。同様の内容の別の記事はこちらです。
最終的には、キー/パスワードに要約されます。openssl_encrypt ライブラリが期待するのは、パスワードではなくキーです。また、鍵のサイズは、暗号の固有鍵サイズのサイズでなければなりません。最初の記事では、より長いキーを指定すると、余分なキーは破棄され、予想よりも短いキーはゼロで埋められる、つまり \x00 バイトと記載されています。私はこの事実をテストしていません。
以下のようにコードを編集しました。
私が使用した考えは、暗号が期待する初期ベクトルのサイズは、鍵のサイズでもあるということです。ここでは、あなたが行っていたように、パスワードではなくキーを渡しています。パスワードをキーに変える方法を見つけるだけです。
あなたのコードでは、オプションと iv (初期化ベクトル) を渡しませんでした。
iv は、暗号化の前に暗号が平文と「混合」する文字列です。暗号が暗号化するのは、この「混合物」です。これは重要ですか?はい!この「混合」がなければ、同一の平文のペアが同一の暗号文のペアになり、攻撃につながる可能性があります。2 つの同一の平文と暗号文のペアが同じユーザーのものでない場合、これら 2 人のユーザーは同じ鍵を使用しています! したがって、平文ごとに固有の iv により、2 つの平文が同一の暗号文になることはありません。つまり、iv はsaltです。
$plaintext = 'Testing OpenSSL Functions';
$methods = openssl_get_cipher_methods();
//$clefSecrete = 'flight';
echo '<pre>';
foreach ($methods as $method) {
$ivlen = openssl_cipher_iv_length($method);
$clefSecrete = openssl_random_pseudo_bytes($ivlen);
$iv = openssl_random_pseudo_bytes($ivlen);
$encrypted = openssl_encrypt($plaintext, $method, $clefSecrete, OPENSSL_RAW_DATA, $iv);
$decrypted = openssl_decrypt($encrypted, $method, $clefSecrete, OPENSSL_RAW_DATA, $iv);
echo 'plaintext='.$plaintext. "\n";
echo 'cipher='.$method. "\n";
echo 'encrypted to: '.$encrypted. "\n";
echo 'decrypted to: '.$decrypted. "\n\n";
}
echo '</pre>';