Zend Filter Encryption / Decryption在解密时添加了nullbytes

时间:2011-09-22 15:53:14

标签: zend-framework encryption filter padding

我正在尝试使用Zend_Filter_Encrypt函数对某些数据进行一些对称加密。问题是如果我加密一些数据然后解密它,解密数据背后有空字节,我不明白为什么。

例如: 明文:测试加密: pk 解密:test

似乎是在解密文本的末尾填充空字节以使其长度等于某个2 ^ n(填充11个字符的字符串以适合16 => 2 ^ 4)。最明显的事情就是剥离这些角色,但我想知道为什么会发生这种情况......

这是我正在使用的代码,这与文档要求你做的不同,因为他们的代码对我不起作用(参见:http://framework.zend.com/manual/en/zend.filter.set.html

    define('VECTOR','EXfPCW23'); //example, not the actual used VECTOR / KEY
    $key = 'lolwatlolwat';

    public function encryptPassword($password, $key)
    {
            $filter = new Zend_Filter_Encrypt();
            $filter->setEncryption(array('key' => $key));       
            $filter->setVector(VECTOR);

            return $filter->filter($password);      
    }

    public function decryptPassword($password, $key)
    {
            $filter = new Zend_Filter_Decrypt();
            $filter->setEncryption(array('key' => $key));
            $filter->setVector(VECTOR);

            return $filter->filter($password);
    }

2 个答案:

答案 0 :(得分:1)

您必须在Decrypt字符串上使用 rtrim 功能。

示例:

   public function decryptPassword($password, $key)
    {
            $filter = new Zend_Filter_Decrypt();
            $filter->setEncryption(array('key' => $key));
            $filter->setVector(VECTOR);

            return rtrim($filter->filter($password);
    }

答案 1 :(得分:0)

Zend文档是否告诉您如何指定填充?如果是,则指定可逆填充;正如您所发现的,零填充是不可逆的。否则,找出Zend所期望的填充明文大小,并自己添加PKCS7填充。这很容易辨认,之后可以移除。