mcryptを使用して入力文字列を暗号化する実装がありました。残念ながら、mcryptはサーバーにインストールされていないためインストールできませんので、これを使用することはできません。 私はphpseclibを見ましたが、残念ながら私は同じ暗号化された文字列を取得しません。ここに私のコードは次のとおりです。mcryptとphpseclibで同じ結果を得ることができません
include('Crypt/AES.php');
$key256 = "123456789";
$iv = "987654321";
$cleartext = "This a teststring :)";
echo $cleartext . "<br /><br />";
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
if (mcrypt_generic_init($cipher, $key256, $iv) != -1)
{
// PHP pads with NULL bytes if $cleartext is not a multiple of the block size..
$cipherText = mcrypt_generic($cipher,$cleartext);
mcrypt_generic_deinit($cipher);
}
$enc64 = bin2hex($cipherText);
echo $enc64 . "<br />";
while (strlen($cleartext) % 16 != 0) {
$cleartext .= "\0";
}
$aes = new Crypt_AES();
$aes->setKey($key256);
$aes->setIV($iv);
$cipherText = $aes->encrypt($cleartext);
$enc64 = bin2hex($cipherText);
echo $enc64;
(インストールmcryptの開発しているサーバー上の)スクリプトを実行した後、私は次のような出力が得られます。
このたTestString :)
0fc60e5a06eca68d4aada496e0e83ea65806abfe7d8f72723da470e6c9e86372 0fc60e5a06eca68d4aada496e0e83ea65806abfe7d8f72723da470e6c9e8637231b74e99d9b729813e974f211550d175
ご覧のとおり、両方の暗号化された文字列は同じです。ほぼ。 phpseclibで暗号化されたものは1ブロックが長すぎるので、なぜ私には分かりません。私はすでにさまざまなキーとブロックのサイズを試しました。私はまた、phpseclibのCrypt_Rijndaelクラスを使用しようとしました。あなたの一人が正しい方向に私を向けることができればと願っています。
phpseclibのデフォルトの埋め込みとは何ですか?両方のバージョンでパディングメソッドを明示的に設定するとよいでしょう。 – rossum
それはとても明白だった...ヒープをありがとう。 $ aes-> disablePadding()はその仕事をしました。デフォルトのパディングを設定する方法が見つかりませんでした。だから私は完全にそれを無効にしています。うまく動作するようです。 私は正しい答えとしてコメントをマークできません。 –
phpseclibのデフォルトのパディングはPKCS#1です。実際、これは、phpseclibをサポートする唯一のタイプの埋め込みです。 – neubert