2014-04-22 59 views
1

當我運行加密時,出現錯誤: 警告:mcrypt_generic_init()[function.mcrypt-generic-init]:密鑰大小過大;提供的長度:16,最大:8如何將mcrypt-generic-init密鑰大小從8增加到16?

我的代碼:

$size = mcrypt_get_block_size('des', 'ecb'); 
$input = pkcs5_pad($input, $size); 

$key = '*5hS7e6$23N#2m7s'; 
$td = mcrypt_module_open('des', '', 'ecb', ''); 
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); 
mcrypt_generic_init($td, $key, $iv); 
$data = mcrypt_generic($td, $input); 
mcrypt_generic_deinit($td); 
mcrypt_module_close($td); 
$data = base64_encode($data); 
return $data; 

我試圖用Java編寫之間的加密解密&(代碼由Java開發者提供)& PHP。但Java只支持16個字符。

謝謝。

回答

0

你不能。 DES加密支持密鑰長度爲56位(7個字符),塊大小爲64位(8個字符)。更多的字符是毫無意義的。我不知道java用更長的鍵做什麼操作,但它以某種方式縮短。

我會問,如果Java程序使用DES或三重DES加密。 Triple-DES使用168位密鑰長度,因此您可以使用16個字符的密鑰。

一些注意事項 - DES被認爲是不安全的,所以我期望使用triple-DES。

0
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, 'ecb'); 
$input = pkcs5_pad($input, $size); 

$key = '*5hS7e6$23N#2m7s'; 
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', 'ecb', ''); 
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); 
mcrypt_generic_init($td, $key, $iv); 
$data = mcrypt_generic($td, $input); 
mcrypt_generic_deinit($td); 
mcrypt_module_close($td); 
$data = base64_encode($data); 
return $data; 

請更改

  1. 如果你想要的大小「16」爲重點有一些大小「德」改變爲「MCRYPT_RIJNDAEL_128」
  2. 如果你想大小「32」該鍵有大號'des'改爲'MCRYPT_RIJNDAEL_256'。

請盡情享受吧