私が保守しているPHPアプリケーションは、mcryptを使用したEBC_MODE暗号化を使用したRijndael_256を使用しています。キーの長さは256ビットではなく、160ビットしかないのが楽しいです。ドキュメントによるとmcrypt_encrypt
、キーが小さすぎる場合は、必要なサイズを取得するためにキーに\0が埋め込まれます。
データを暗号化するためのキー。必要なキーサイズよりも小さい場合は、「\0」が埋め込まれます。キーにASCII文字列を使用しないことをお勧めします。
これは、mcrypt.cの1186行目の先頭付近で発生し、1213行目のキーを変更しているようです。
短すぎるとしましょう$key = 'abcdefghijkm';
。ただし、PHPのmcryptの実装では、RIJNDAEL_256を使用するときに32文字(または256ビット)に拡張されます。最終的なキーはどのようになりますか?
同じ暗号化データを使用しているが、別の言語である別のアプリケーションが構築されているため、これを求めています。正確にはPerlで、私はを使用してCrypto::Rijndael
います。与えられたサンプルキーの場合、データを再度復号化できるようにするために、私がフィードする必要がある正確なキーCrypto::Rijndael
(またはその他のキー)は何ですか?
アップデート
Perlを使用すると、\ 0が埋め込まれたpack('a32', 'my secret key');
(またはZ32
)キーを生成でき、 length()
32を報告し、Crypt::Rijndael
モジュールはキーを受け入れます。PHPのmcryptのソースを見ると、これが生成されているキー(\ 0が埋め込まれている)であるはずですが、それを取得することはできません。
理論的には、PHPではpack('a32', 'my secret key');
、PHPのmcryptが生成するのと同じ\ 0の埋め込みキーが生成されるはずですが、そうではありません。
すべてをもう一度暗号化するのに非常に近いですが、新しいキーを使用します。これには時間がかかりすぎます。