1

データを暗号化するために作成したこの関数を使用しています。

function encryptCredential($data) {
$key = '9cqkTFHOfOmKn8kt&NSlIK*XMRWWx*tNY$azRdEvm2to*AQOll%8tP18g35H!zNg9l85pgnww$&q6y@1WrWZhKhx&23acq^*FWf*xdnmI%7aWwM6JQLm%tzYG^*8PIh1zD@D5QKa98Gg';
$encryptedData = mcrypt_cbc(MCRYPT_TripleDES, substr($key,0,32), pad($data), MCRYPT_ENCRYPT, substr($key,32,16));
return base64_encode($encryptedData);
}

PHP では、次の警告が表示されます。

PHP Warning:  mcrypt_cbc() [<a href='function.mcrypt-cbc'>function.mcrypt-cbc</a>]: The IV parameter must be as long as the blocksize in /home/xxxxx/public_html/libraries/global.inc.php on line xx

私のキーは長すぎますか?何文字にするべきですか?

4

4 に答える 4

1

ブロック サイズ、つまり IV サイズは 8 バイトです。キーのサイズは 24 バイトです。

この情報は、mcrypt_get_iv_sizeおよびで取得できますmcrypt_get_key_size

CBC モードでは、IV は暗号化されたメッセージごとに一意で予測不可能でなければなりません。mcrypt_create_iv(8)適切なものを作成するために使用します。秘密にする必要はないので、暗号化されたメッセージと一緒に保存できます。

于 2011-02-27T11:39:55.680 に答える
1

非推奨の警告を見つけたら注意する必要があります。

つまり、 TripleDESのブロック サイズは 8 バイトですが、IV に 16 バイトを指定しています。に変更するsubstr($key,32,16)substr($key,32,8)、動作するはずです。

それでも、新しい API に移行することをお勧めします。

于 2011-02-27T11:19:15.097 に答える
0

使用している機能は廃止されたようです。http://se2.php.net/manual/en/function.mcrypt-cbc.php を参照してください。

この関数はもう使用しないでください。代替については mcrypt_generic() および mdecrypt_generic() を参照してください。

代わりにこれらの関数を試して、それでもエラーが発生するかどうかを確認してください

于 2011-02-27T10:55:59.467 に答える
0

すべての助けをありがとう。IV は後で修正しますが、このページを見て必要としている人のために、新しい機能を以下に示します。

`//start encryptCredential function function encryptCredential($data) { $key = '9cqkTFHOfOmKn8kt&NSlIK*XMRWWx*tNY$azRdEvm2to*AQOll%8tP18g35H!zNg9l85pgnww$&q6y@1WrWZhKhx&23acq^*FWf*xdnmI%7aWwM6JQLm%tzYG^*8PIh1zD@D5QKa98Gg'; $cipher = mcrypt_module_open(MCRYPT_blowfish, '', 'cbc', ''); mcrypt_generic_init($cipher, substr($key,8,56), substr($key,32,8)); $encrypted = mcrypt_generic($cipher, pad($data)); mcrypt_generic_deinit($cipher); base64_encode($encrypted) を返します。} //encryptCredential 関数の終了

//decryptCredential 関数の開始 function decryptCredential($data) { $encryptedData = base64_decode($data); $key = '9cqkTFHOfOmKn8kt&NSlIK*XMRWWx*tNY$azRdEvm2to*AQOll%8tP18g35H!zNg9l85pgnww$&q6y@1WrWZhKhx&23acq^*FWf*xdnmI%7aWwM6JQLm%tzYG^*8PIh1zD@D5g'Ka98G $cipher = mcrypt_module_open(MCRYPT_blowfish, '', 'cbc', ''); mcrypt_generic_init($cipher, substr($key,8,56), substr($key,32,8)); $decrypted = unpad(mdecrypt_generic($cipher, $encryptedData)); mcrypt_generic_deinit($cipher); $decrypted を返します。} //decryptCredential 関数の終了`

于 2011-02-28T11:48:19.240 に答える