我已经编写了一个用mcrypt加密数据的代码。当我创建一个IV它工作但是当我解密它时,解密的文本与以前不一样,它给了我这个错误:
Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize
这是我创建IV时的代码:
$iv = mcrypt_create_iv(mcrypt_get_iv_size($algo, $type), MCRYPT_RAND);
问题还在于它为字符串提供了不可读的字符。
以下是加密时的代码:
trim(base64_encode(mcrypt_encrypt($algo, $pass,
$data, $type, $iv)));
这是解密:
trim(mcrypt_decrypt($algo, $pass,
base64_decode($data), $type, $iv));
问题:为什么它不能解密所以我得到了明文以及它为什么会给我一个错误。
修改 当我使用EMPTY IV时,它可以工作,我得到明文,但它仍然给我错误:
Warning: mcrypt_xxxxxx(): The IV parameter must be as long as the blocksize
答案 0 :(得分:0)
我已经编写了一个代码,用于使用mcrypt 加密数据。
这永远不是好兆头。 (强调我。)
创建IV时,对它解密时可以使用,但解密后的文本与以前不同,这会给我这个错误:
<svg> <!-- A bunch of paths and groups--> <defs> <mask id="joined-mask" maskUnits="objectBoundingBox"> <linearGradient id="tran-grad"> <stop offset="0" stop-color="#fffff" stop-opacity="0"/> <stop offset="0.3359" stop-color="#fffff"/> <stop offset="0.7499" stop-color="#fffff"/> <stop offset="1" stop-color="#fffff" stop-opacity="0"/> </linearGradient> <rect fill="url(#tran-grad)" width="1245" height="300"/> </mask> </defs> </svg>
这是创建IV时的代码:
Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize
您知道$iv = mcrypt_create_iv(mcrypt_get_iv_size($algo, $type), MCRYPT_RAND);
是什么意思吗?这意味着MCRYPT_RAND
,一个不安全的随机数生成器。
每种需要初始化向量(IV)的算法都具有以下安全要求:
rand()
都失败了:MCRYPT_RAND
仅有2 ^ 32个可能的输出,并且可以预测。
问题:为什么它不能解密,所以我得到明文,为什么它给我一个错误。
最简单的答案是mcrypt sucks and you should use something else。我的建议是here。