【发布时间】:2021-02-27 03:30:59
【问题描述】:
我正在使用 phpseclib 加密/解密某些图像的数据 uri。我注意到,当我使用 IV 时,data:image/png;base64,data:image/jpg;base64,data:image/jpeg;base64 部分传递的数据 uri 将丢失,只有 base64 字符串的其余部分会保留,我将无法显示解密操作后的图像。是否可以在不丢失每个数据 uri 加密的那部分的情况下使用 IV?
//data URI creation from uploaded image using PHP-dataURI https://github.com/alchemy-fr/PHP-dataURI
$dataObject = DataURI\Data::buildFromFile('myimage.jpg');
//data URI encrypt
$cipher = new AES();
//set password for encryption
$cipher->setPassword($password);
//set the IV - this will corrupt data uri generated
$cipher->setIV(Random::string($cipher->getBlockLength() >> 3));
//encrypting the data
$output = $cipher->encrypt(DataURI\Dumper::dump($dataObject));
【问题讨论】:
-
@ArtjomB。您建议的问题的实现适用于 c# 和 java。我正在使用 PHP,所以我找不到任何可以帮助我解决问题的有用信息。无论如何,谢谢。
-
你是说你的解密返回了损坏的明文。让我为您改写链接的答案。 IV 在解密期间需要与该单个密文的加密相同。如果您创建一个随机 IV 而不保存它,那么您将无法在解密期间恢复明文的前 16 个字节。 IV 不是秘密的,但可以与密文一起发送。我们通常将其添加到密文中。这有帮助吗?
-
好的,但是我正在使用库函数来附加 IV
$cipher->setIV(Random::string($cipher->getBlockLength() >> 3));我不确定我是否可以做同样的事情并在解密时获得相同的结果,我已经按照建议完成了从文档 -
不要忘记包含完整的代码,包括解密部分。
标签: php encryption phpseclib data-uri