【问题标题】:Encryption mode requires an initialization vector of size 16加密模式需要一个大小为 16 的初始化向量
【发布时间】:2021-10-20 03:18:12
【问题描述】:

我正在尝试使用 mcrypt_encrypt 加密字符串,但收到此警告 Encryption mode requires an initialization vector of size 16。这是代码:

<?php
$str = "hassan";
$key = "WKSaRVxscxa7eDrX0mLjU6OUphS6F1z0";

$block = 16;
$pad = $block - (strlen($str) % $block);
$str .= str_repeat(chr($pad), $pad);


$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CBC));

var_dump($encrypted);

这是我得到的输出

Warning: mcrypt_encrypt(): Encryption mode requires an initialization vector of size 16 in C:\laragon\www\info\index.php on line 10
string(0) ""

请帮帮我!!!

【问题讨论】:

  • 你根本没有提供静脉注射,你卡在哪里了?
  • IV 必须指定为mcrypt_encrypt() 中的第五个参数。请注意,mcrypt 已弃用且不安全。
  • 是的,这是旧代码。一直在做服务器。迁移到新的并没有在那里工作。 mcrypt 扩展安装在新服务器上。好的,我会检查IV,看看它是否有效。谢谢。
  • 最后一个参数是默认参数设置为空。我不认为这对我来说是个问题。
  • 放置静脉注射解决了这个问题。但是,我如何在服务器中做到这一点?为什么旧代码会这样工作。

标签: php encryption mcrypt


【解决方案1】:

如果您想重新创建当前操作,那么您应该提供一个由 16 个零字节组成的 IV(不仅仅是 null'0' 字符)。在您必须提供 IV 之前,隐式使用了全零 IV。

您正在使用不安全的代码。警告没有无故添加,mcrypt 是一个无人维护的库,迫切需要更换。即使您提供随机 IV,CBC 通常也不安全。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多