【问题标题】:PHP7: mcrypt_cbc not workPHP7:mcrypt_cbc 不起作用
【发布时间】:2018-05-20 08:06:43
【问题描述】:

请帮忙解决问题。

如何让它在 php 7 上工作?

function decr($string) {
    $key="";
    $iv = mcrypt_create_iv(mcrypt_get_block_size (MCRYPT_CAST_32, MCRYPT_MODE_CFB), MCRYPT_DEV_RANDOM);
    $string = base64_decode(trim($string));
    $dec =  mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_DECRYPT, $iv);
    return $dec;
}

【问题讨论】:

  • 我尝试 mcrypt_decrypt(MCRYPT_3DES , $key, $string, MCRYPT_MODE_CBC, $iv);但它不会对完整的字符串进行 dycrypt :(
  • 请包含您遇到的确切错误消息或“不工作”行为。
  • 最好不要使用 PHP mcrypt,它是废弃软件,多年未更新,不支持标准 PKCS#7(née PKCS#5)填充,仅支持非标准空填充甚至不能用于二进制数据。 mcrypt 有许多出色的 bugs 可以追溯到 2003 年。不推荐使用的 mcrypt-extension 将在 PHP 7.2 中删除。而是考虑使用defuseRNCryptor,它们提供了完整的解决方案并且正在维护中并且是正确的。
  • 不要在新工作中使用 3DES,它不如 AES 安全,并且只有 112 位安全性和三重密钥,而是使用 AES(高级加密标准)它支持 128,192 和 256 位的密钥大小。同样使用 Cast 也不是一个好的选择。
  • 我需要解码旧数据:(

标签: php php-7 mcrypt


【解决方案1】:

我最近在一个应用程序中遇到了这个问题,我没有按照建议使用mcrypt_encrypt(),因为:

警告 自 PHP 7.1.0 起,该函数已被弃用。强烈建议不要依赖此函数。

我是通过这种方式使用 openssl (php-openssl) 完成的:

function _encrypt($data){
    $initialVector = openssl_random_pseudo_bytes(16, $secure);
    $secretKey = '<SECRET_KEY>'; // string : 16 length
    return  openssl_encrypt($data, "aes-128-cbc", $secretKey, OPENSSL_RAW_DATA, $initialVector);
}


function _decrypt($data){
    $initialVector = openssl_random_pseudo_bytes(16, $secure);
    $secretKey = '<SECRET_KEY>'; // string : 16 length
    return  openssl_decrypt($data, "aes-128-cbc", $secretKey, OPENSSL_RAW_DATA, $initialVector);
}

注意:以这种方式生成的初始向量/密钥只是示例

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 2016-05-30
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    相关资源
    最近更新 更多