首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend过滤器加密/解密在解密时添加空字节

Zend过滤器加密/解密在解密时添加空字节
EN

Stack Overflow用户
提问于 2011-09-22 23:53:14
回答 2查看 1K关注 0票数 1

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

例如: Plaintext: test Encrypted:����pk�Decrypted: test����

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

这就是我正在使用的代码,它不同于文档希望你这样做的方式,因为他们的代码不适合我(参见:http://framework.zend.com/manual/en/zend.filter.set.html)

代码语言:javascript
复制
    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);
    }
EN

回答 2

Stack Overflow用户

发布于 2012-02-22 09:52:59

您必须对解密字符串使用rtrim函数。

示例:

代码语言:javascript
复制
   public function decryptPassword($password, $key)
    {
            $filter = new Zend_Filter_Decrypt();
            $filter->setEncryption(array('key' => $key));
            $filter->setVector(VECTOR);

            return rtrim($filter->filter($password);
    }
票数 1
EN

Stack Overflow用户

发布于 2011-09-23 04:37:07

Zend文档是否告诉您如何指定填充?如果是,那么指定一个可逆的填充;正如您已经发现的,零填充是不可逆的。否则,找出Zend期望的填充明文的大小,并自己添加PKCS7填充。这是很容易辨认和删除的事后。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7517736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档