Rijndael-256加密 - 在解密字符串末尾填充

时间:2012-12-30 00:37:58

标签: php mcrypt

所以,我正在尝试使用mcrypt解密Rijndael-256,这一切都很好。 但是,在字符串的最末端有填充,使其正好是32字节长。 知道为什么吗?这是它输出的内容。

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。

2 个答案:

答案 0 :(得分:2)

http://php.net/manual/en/function.mcrypt-encrypt.php

  

数据

     

将使用给定的密码和模式加密的数据。   如果数据大小不是n * blocksize,则数据将被填充   用'\ 0'

     

返回的crypttext可能大于数据的大小   由数据给出。

答案 1 :(得分:0)

base64_encoding我的数据加密之前解决了这个问题。耶!