带有三重和 cbc 的 mcrypt_decrypt 无法正常工作

Posted

技术标签:

【中文标题】带有三重和 cbc 的 mcrypt_decrypt 无法正常工作【英文标题】:mcrypt_decrypt with tripledes and cbc not working proper 【发布时间】:2015-10-09 16:19:24 【问题描述】:

根据上面的屏幕截图,当我可以在浏览器中查看源代码时,我的解码数据将如下所示。否则,由于此问题,请正确解密但不能正确存储在会话中。提前致谢。

  function decrypt($data, $key)         
    $iv = chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0); //8 bytes array filled with zeros        

    $key = mb_convert_encoding($key, 'UTF-16LE'); 
    $key = md5($key, true); 
    $key = $key . $key;
    $tripleKey = substr($key, 0, mcrypt_get_key_size(CIPHER, MODE));

    $decodedText = mcrypt_decrypt(CIPHER, $tripleKey, base64_decode($data), MODE, $iv);

    // check and remove PKCS#7 padding
    if (!$decodedText) 
        return $decodedText;
    
    $lastByte = ord($decodedText[strlen($decodedText) - 1]);
    if ($lastByte == 0 || $lastByte > mcrypt_get_block_size(CIPHER, MODE)) 
        return FALSE;
    
    $paddingText = substr($decodedText, -$lastByte, $lastByte);
    $decodedText = substr($decodedText, 0, -$lastByte);
    if ($paddingText != str_repeat(chr($lastByte), $lastByte)) 
        return FALSE;
    

    return $decodedText;

【问题讨论】:

【参考方案1】:

请尝试如下更新行。

$decodedText = str_replace("\0", "", $decodedText);
return $decodedText;

【讨论】:

以上是关于带有三重和 cbc 的 mcrypt_decrypt 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中使用三重 DES 执行 ISO 9797-1 MAC?

在 ubuntu/linux/unix 中是不是有带有 cbc 加密的 aes 256?

Bouncycastle和PKCS#1 v2.1,使用RSASSA-PSS进行签名并使用带有RSAES-OAEP的AES CBC进行加密

使用 Java 解密 AES256 CBC

IDTECH信用卡读卡器数据解密

尝试使用 BouncyCastle 的 AES-CBC 来解密加密文本的问题