php - 加密模式需要一个大小为 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) ""
请帮我!!!
解决方案
如果要重新创建当前操作,则应提供由 16 个零字节(不仅仅是null
或'0'
字符)组成的 IV。在您必须提供 IV 之前,隐式使用了全零 IV。
您正在使用不安全的代码。警告不是无缘无故添加的,mcrypt
是一个急需更换的无人维护的库。即使您提供随机 IV,CBC 通常也不安全。
推荐阅读
- django - 为什么我在 Django 中出现错误:|: 'Model' 和 'Model' 不支持的操作数类型
- reactjs - React/TypeScript/Redux/Thunk 动作未分派且状态未更新
- r - 将较大的数据帧分成两个有组织的数据帧的最佳方法?
- javascript - 将数据传递给引导程序 4 模式
- binary - Tableau Desktop - 基于多个值创建自定义筛选器
- c# - Mac硬件光标重叠自定义光标统一c#
- julia - 如何在避免溢出的同时将`abs2`应用于`CuArray{Complex{Int8}}`
- powerbi - powerBi,将列拆分为按顺序分隔的列
- dropbox - Dropbox权限只设置为查看
- javascript - 在单个异步函数中链接等待