通常,我openssl_encrypt
在 PHP 中使用 AES 加密简单的字符串,效果很好。
现在我需要使用 AES-256-CTR 模式加密文件,但唯一的方法是对file_get_contents
文件的全部内容进行加密,然后将其发送到openssl_encrypt
函数以加密实际文件数据。问题是这种方法非常“差”,因为内存严重浪费。
1) 有没有办法使用 PHP OpenSSL 处理分块数据?
例如:
<?php
// ...
$f = fopen('large.iso','r');
while(feof($f)){
$chunk = fread($f,16);
$cipher = openssl_encrypt(...$chunk...);
// ... code ...
}
// ... more code ...
?>
2)openssl_encrypt
官方文档尚未发布。有人可以澄清用于 AES-CTR 模式的函数参数的含义吗?计数器是否自动处理?是否有必要对函数返回的数据进行手动异或?
注意:这是一个专业项目,所以我不想使用phpseclib
或其他人的“匿名”库,也不想使用命令行。