首页 > 解决方案 > 加密模式需要一个大小为 16 的初始化向量

问题描述

我正在尝试使用 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) ""

请帮我!!!

标签: phpencryptionmcrypt

解决方案


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

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


推荐阅读