我正在尝试使用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)
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);
}发布于 2012-02-22 09:52:59
您必须对解密字符串使用rtrim函数。
示例:
public function decryptPassword($password, $key)
{
$filter = new Zend_Filter_Decrypt();
$filter->setEncryption(array('key' => $key));
$filter->setVector(VECTOR);
return rtrim($filter->filter($password);
}发布于 2011-09-23 04:37:07
Zend文档是否告诉您如何指定填充?如果是,那么指定一个可逆的填充;正如您已经发现的,零填充是不可逆的。否则,找出Zend期望的填充明文的大小,并自己添加PKCS7填充。这是很容易辨认和删除的事后。
https://stackoverflow.com/questions/7517736
复制相似问题