首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mcrypt解码错误

mcrypt解码错误
EN

Stack Overflow用户
提问于 2010-04-13 23:57:40
回答 1查看 285关注 0票数 0

我对下面的php函数(一个更大的类的一部分)有一些问题。

代码语言:javascript
复制
    //encode
    public function acc_pw_enc($text, $key) {
    $text_num = str_split($text, 8);
    $text_num = 8 - strlen($text_num[count($text_num)-1]);

    for ($i=0; $i < $text_num; $i++) {
        $text = $text . chr($text_num);
    }

    $cipher = mcrypt_module_open(MCRYPT_TRIPLEDES, '', 'cbc', '');
    mcrypt_generic_init($cipher, $key, 'fYfhHeDm');
    $decrypted = mcrypt_generic($cipher, $text);
    mcrypt_generic_deinit($cipher);
    return base64_encode($decrypted);
}

    //decode
public function acc_pw_dec($encrypted_text, $key) {
    $cipher = mcrypt_module_open(MCRYPT_TRIPLEDES, '', 'cbc', '');
    mcrypt_generic_init($cipher, $key, 'fYfhHeDm');
    $decrypted = mdecrypt_generic($cipher, base64_decode($encrypted_text));
    mcrypt_generic_deinit($cipher);
    $last_char = substr($decrypted, -1);

    for($i=0; $i < 8-1; $i++) {
        if(chr($i) == $last_char) {      
            $decrypted = substr($decrypted, 0, strlen($decrypted)-$i);
            break;
        }
    }
    return rtrim($decrypted); //str_replace("?", "", $decrypted);
}

例如,如果我用盐/密钥'yBevuZoMy‘加密字符串'liloMIA01’,我将得到'7A30ZkEjYbDcAXLgGE/6nQ==‘。

我将liloMIA01作为解密值,我尝试使用rtrim,但它不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-14 00:10:56

mcrypt的一个大问题是,当与3DES这样的分组密码一起使用时,它不支持任何填充算法。因此,如果数据不是块大小的倍数(在本例中为8字节),最后将得到垃圾。

您需要使用pkcs#5正确填充数据,或者添加一个长度字段。

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

https://stackoverflow.com/questions/2631080

复制
相关文章

相似问题

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