【问题标题】:mcrypt_get_block_size(): Module initialization failed - Error on functionmcrypt_get_block_size():模块初始化失败 - 函数错误
【发布时间】:2017-07-11 17:35:28
【问题描述】:

我正在尝试创建一个可以加密字符串的函数。我有以下代码,但出现错误。

$key = "testkey"; // This is the function that does the encryption. Treat it as a black box. Do not edit! function encrypt($str, $key){ $block = mcrypt_get_block_size('ISO-8859-1', 'ecb'); $pad = $block - (strlen($str) % $block); $str .= str_repeat(chr($pad), $pad); return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB)); } // call the encrypt function and send it the key and the data to encrypt. Store the returned data in the $dataopt variable. $dataopt = encrypt($rawstring, $key);

错误是“mcrypt_get_block_size(): Module initialization failed on line on line 41”,即 $block = mcrypt_get_block_size('ISO-8859-1', 'ecb');

有什么想法吗?

【问题讨论】:

    标签: php mcrypt


    【解决方案1】:

    您将'ISO-8859-1' 作为第一个参数传递给mcrypt_get_block_size

    您可能打算将MCRYPT_RIJNDAEL_128 作为第一个参数传递。

    请注意,mcrypt 已被弃用,因此您可能应该研究其他解决方案。查看this question 了解一些替代方案。

    【讨论】:

    • 嗨,奥兹。谢谢你的答复。我已将ISO-8859-1 替换为 MCRYPT_RIJNDAEL_128,但在第 44 行出现错误“警告:mcrypt_encrypt():此算法不支持大小为 7 的密钥。仅支持大小为 16、24 或 32 的密​​钥”,这与返回 base64_encode 有关(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB));感谢您的帮助
    • @deanhodges 如果答案有帮助,请接受。正如我所提到的,我强烈建议您根本不要使用mcrypt。您的错误是您需要一个二进制密钥并且您正在传递一个字符串(请参阅php.net/manual/en/function.mcrypt-encrypt.php)。 mcrypt 是非常低级的,它很容易在概念上出错即使一切看起来都很好。我不知道您为什么要专门尝试加密字符串,但是有比 mcrypt 更好的解决方案几乎可以满足任何需求。
    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 2018-02-13
    • 2022-10-09
    • 2023-03-12
    • 2012-04-10
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多