2015-11-30 51 views
1

我們有一些傳統需要使用mcrypt解碼函數。mcrypt函數在舊服務器上不起作用

  • old sever Ubuntu Linux 10.04.1 working sample。有一個info.php可用
  • 新服務器Debian Linux 8 failing sample。有一個info.php可用

PHP版本5.6.14-0 + deb8u1在兩臺服務器上。

PHP代碼:

<?php 

    $salt = '[email protected]}7F^LkC[k_bx~E^'; // 
    $text = 'Our text decoeded'; 
    $encout = simple_encrypt($salt, $text); 
    echo 'encrypted: ' . $encout .'<br/>'; 
    echo 'decrypted: ' . simple_decrypt($salt, $encout) ; 


    function simple_encrypt($salt, $text) { 
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)))); 
    } 

    function simple_decrypt($salt, $text) 
    { 
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $salt,  base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))); 
    } 
?> 

爲什麼這兩個發球有所不同呢?

+1

此外,這個加密代碼是非常不安全的。 [ECB模式](https://blog.filippo.io/the-ecb-penguin/),[MCRYPT_RIJNDAEL_256](https://paragonie.com/blog/2015/05/if-you-re-typing-word -crypt-into-your-code-you-re-doing-it-wrong)等等。 –

回答

1

這是因爲之前,mcrypt會接受非標準密鑰或iv尺寸,只需用\ 0填充它們直到它們的長度正確。從5.6開始(您的舊服務器未運行5.6,它似乎運行5.3),正如您在文檔中看到的,無效密鑰和iv不再被接受,並且mcrypt_encrypt失敗。你的密鑰似乎是160位長,它需要是192位(下一個有效的密鑰長度)。您可以通過將4 \ 0添加到您的密鑰來修復它。

+0

我會認爲它用4個0x00字節填充以達到有效密鑰大小:192位。 –

+0

對於諸如MCRYPT_RIJNDAEL_256的256位密鑰密碼,192位不是有效的密鑰大小。 – pvg

+0

MCRYPT_RIJNDAEL_256中的256表示塊大小。 Rijndael獨立支持三種塊大小和三種密鑰大小。也許你混淆了Rijndael和AES。 AES是Rijndael的一個子集,固定塊大小爲128位。 –

相關問題