2011-02-27 62 views
1

我使用這個功能,我做了加密數據:收到錯誤PHP中的功能mcrypt_cbc()

function encryptCredential($data) { 
$key = '9cqkTFHOfOmKn8kt&NSlIK*XMRWWx*tNY$azRdEvm2to*AQOll%8tP18g35H!zNg9l85pgnww$&[email protected]&23acq^*FWf*xdnmI%7aWwM6JQLm%tzYG^*[email protected]'; 
$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 

是我的鑰匙太長?它應該是多少個字符?

+0

'//啓動墊unpad功能 功能墊($文本){// 添加一個0x80的字節,並讓PHP墊使用0x00字節。 返回包(「a * H2」,$ text,「80」); //返回$ text; } 函數unpad($ text){ //返回所有除了0x00字節被刪除的文本的尾部0x80 return substr(rtrim($ text,「\ 0」),0,-1); // return trim($ text); } // end pad unpad functions' – MrPHP 2011-02-27 10:52:04

+1

從[manual](http://www.php.net/manual/en/function.mcrypt-cbc.php):「此功能不應該再使用,請參閱mcrypt_generic()和mdecrypt_generic()用於替換。「 – 2011-02-27 10:52:08

回答

1

你應該注意的廢棄警告,當你發現它們。

也就是說,TripleDES的塊大小是8個字節,但是您爲IV提供了16個字節。將substr($key,32,16)更改爲substr($key,32,8),它應該可以工作。

但我仍然建議移動到新的API。

1

塊大小和IV大小都是8個字節。密鑰大小爲24個字節。

您可以通過mcrypt_get_iv_sizemcrypt_get_key_size獲取此信息。

在CBC模式下,每個加密消息的IV必須是唯一且不可預知的。使用mcrypt_create_iv(8)來創建一個合適的。它不需要保密,所以它可以與加密的消息一起存儲。

0

感謝您的幫助。我將在稍後解決IV,但這裏是我的新功能,任何人看到這個頁面,需要他們:

`//啓動encryptCredential功能 功能encryptCredential($數據){$ 鍵=「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); return base64_encode($ encrypted); } //端encryptCredential功能

//開始decryptCredential功能 功能decryptCredential($數據){$ =的EncryptedData BASE64_DECODE($數據); $ key ='9cqkTFHOfOmKn8kt & NSIIK * 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)); $ decrypted = unpad(mdecrypt_generic($ cipher,$ encryptedData)); mcrypt_generic_deinit($ cipher); return $ decrypted; } // 結束decryptCredential function`

+0

這裏是一個iv和密鑰大小的模塊列表: – MrPHP 2011-02-28 11:49:58

+0

cast-128,iv:8,key:16 gost,iv:8,key:32 rijndael-128,iv:16,key:32 twofish ,iv:16,key:32 arcfour,iv :, key: cast-256,iv:16,key:32 loki97,iv:16,key:32 rijndael -192,iv:24,key:32 saferplus,iv:16,key:32 wake,iv :, key: blowfish-compat,iv:8,key:56 des,iv:8,key:8 rijndael-256,iv:32,key :32 蛇,iv:16,關鍵:32 xtea,​​iv:8,key:16 河豚,iv:8,關鍵:56 enigma,iv :,key: rc2,iv:8,key:128 tripledes,iv:8,key:24 – MrPHP 2011-02-28 11:50:39