2012-02-16 7 views
1

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クラスを使用しようとしました。あなたの一人が正しい方向に私を向けることができればと願っています。

+1

phpseclibのデフォルトの埋め込みとは何ですか?両方のバージョンでパディングメソッドを明示的に設定するとよいでしょう。 – rossum

+1

それはとても明白だった...ヒープをありがとう。 $ aes-> disablePadding()はその仕事をしました。デフォルトのパディングを設定する方法が見つかりませんでした。だから私は完全にそれを無効にしています。うまく動作するようです。 私は正しい答えとしてコメントをマークできません。 –

+1

phpseclibのデフォルトのパディングはPKCS#1です。実際、これは、phpseclibをサポートする唯一のタイプの埋め込みです。 – neubert

答えて

0

コピーしたコメント:両方のバージョンで同じパディングを使用していることを確認しましたか?

関連する問題