php openssl iv,PHP openssl_decrypt:即使使用不同的IV,部分解密仍然有效吗?

给定以下要加密的电子邮件以及此(弱)加密密钥:

$source="example.email.from.someone@my-office.co.uk";

$pass="Somepassword...";

我想生成一个比较好的加密字符串:

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);

$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

$method="AES-128-CBC";

$encrypted=openssl_encrypt($source, $method, $pass, true, $iv);

如果我尝试解密,效果很好:

$decrypted=openssl_decrypt ($encrypted, $method, $pass, true, $iv);

echo $decrypted;

// example.email.from.someone@my-office.co.uk

但是,当我尝试使用其他$iv(!)进行解密时,我希望得到一个无意义的结果,但我得到了:

$iv2 = "tralala1tralala2";

$decrypted=openssl_decrypt ($encrypted, $method, $pass, true, $iv2);

echo $decrypted;

// m~Œ=¢ì •wêàdÏŠom.someone@my-office.co.uk

因此,即使使用不同的$iv(“ om.someone@my-office.co.uk”),基本上也可以解密最后26个字符.有人可以解释为什么会这样吗? (即使我再次更改$iv,也会解密相同的26个字符)

我已经从最佳答案here得到了这种加密方法

解决方法:

要了解这一点,您将需要研究块密码的工作方式.

通常(包括AES / Rijndael),每个块都用于影响下一个块的解密. IV仅用于影响第一个块的解密(不存在先前的块).因此,是的,根据所使用的确切算法,单独的IV仅会影响密文的第一块的解密.这就是您所看到的.

标签:encryption,php

来源: https://codeday.me/bug/20191120/2040380.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值