2012-12-30 112 views
1

所以,我試圖用mcrypt解密Rijndael-256,這都很好。 但是,在字符串的最後部分有一個填充符,使其長度恰好爲32個字節。 任何想法爲什麼?這是它輸出的內容。Rijndael-256加密 - 解密字符串結尾的填充

array (size=9) 
    'cryptedText' => string 'O¿{žû¦ê§Þøµ; *¬rÄÅϧ„•T' (length=32) 
    'IV' => string 'ÄêKG£ED^°「F¨ŠêFx)\e_¶üŠèJÂ|' (length=32) 
    'title' => string 'Untitled' (length=8) 
    'deleteKey' => string 'ff349d33af4cff27143f66680586121e3c17d1f81aee42c7beb645684ca95558447f0eba757c7ecc785ea39633cfad5a6144fd5ea5028ca9c342e15291d7fd60' (length=128) 
    'date' => string '1356827615' (length=10) 
    'uid' => string '0' (length=1) 
    'urlID' => string '2' (length=1) 
    'id' => string '2' (length=1) 
    'decryptedText' => string 'hello woaaaaaaaaarld������������' (length=32) 
               ^^^^^^^^^^^^ This 

如果我添加超過32個字符,它墊64,等...

這裏是如何我也不對其解密:

 $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, ''); 

     if (mcrypt_generic_init($cipher, $key, $result_set['IV']) != -1) { 
      $decrypted = mdecrypt_generic($cipher, $result_set['cryptedText']); 
      mcrypt_generic_deinit($cipher); 
      mcrypt_module_close($cipher); 
      $result_set['decryptedText'] = $decrypted; 
     } 

Rijndael算法-256加密數據被存儲在我的數據庫中的LONGBLOB(二進制)數據類型,以及IV。

回答

0

base64_encoding我的數據在加密之前解決了這個問題。好極了!

+0

我不是加密專家,但我敢肯定,這大大削弱了您的加密,因爲您的輸入數據現在處於非常可預測的格式。爲什麼不簡單地去掉空字節,或者添加一個表示輸入數據長度的整數? – Halcyon

+0

它爲什麼會削弱加密? –

+0

@FritsvanCampen我不明白爲什麼這使數據「以可預測的格式」。二進制邏輯上是相同的東西,但沒有人抱怨它是可預測的格式。 –