mcrypt_decrypt()错误更改密钥大小

Asa*_*aoz 18 php encryption mcrypt

mcrypt_decrypt():此算法不支持大小为15的密钥.仅支持尺寸为16,24或32的按键

我该如何解决这个问题?我的密钥已设置 - 无法更改它.它必须是本地更改,我认为我的本地PHP版本对于我加载的项目来说太先进了.我怎样才能解决这个问题?

Han*_*nky 43

你有没有更新到5.6?它说

不再接受无效的密钥和iv尺寸.mcrypt_decrypt()现在将抛出警告,如果输入无效,则返回FALSE.以前,键和IV用'\ 0'字节填充到下一个有效大小.

参考

阅读该报价的最后一行,在那里你会找到你的解决方案:)

mcrypt_decrypt():此算法不支持大小为15的密钥.仅支持尺寸为16,24或32的按键

这意味着你需要填充你的密钥\0 (这是以前的版本为你做的)

$key=$key."\0";
Run Code Online (Sandbox Code Playgroud)

  • `以前键和IV用'\ 0'字节填充到下一个有效大小.你也这样做:) (2认同)

tro*_*ter 13

我继续根据Hanky웃Panky的回答创建了一个函数.

这可以与任何键长度一起使用,以确保它的大小正确.

function pad_key($key){
    // key is too large
    if(strlen($key) > 32) return false;

    // set sizes
    $sizes = array(16,24,32);

    // loop through sizes and pad key
    foreach($sizes as $s){
        while(strlen($key) < $s) $key = $key."\0";
        if(strlen($key) == $s) break; // finish if the key matches a size
    }

    // return
    return $key;
}
Run Code Online (Sandbox Code Playgroud)