Я хочу зашифровать файлы во время их создания и расшифровать файлы во время операции чтения с использованием алгоритма AES. Я также написал код в vfs_write()
и vfs_read()
для шифрования и дешифрования соответственно, и он также работает хорошо, но единственная проблема сейчас в том, что k всякий раз, когда я передаю файл в vfs_write()
, длина которого не кратна 16 ( РАЗМЕР БЛОКА AES) den AES выполняет дополнение к нему, чтобы сделать его кратным 16, и bcz этого размера файла увеличивается, но функция write()
не знает об этом и поэтому отклоняет
например: - предположим, что я ввожу данные как "123", здесь length
равно 4 (длина данных 3 + 1 символ '\ 0'), и поэтому AES дополняет его 12 байтами, чтобы сделать его 16 байтами (как AES). работает с 16-байтовыми блоками), но write()
принимает только исходную длину, равную 4, поэтому я хочу знать, как изменить размер файла до 16 (в данном случае), а также где это сделать в коде ядра.
Я попробовал это
inode->i_size=new_length;
inode->i_op->truncate(inode);
также я попробовал
if(file->f_flags & O_APPEND)
*pos=i_size_read(inode);
но это не работает, зависает ядро bcz, а также я не понимаю, где делать такие вещи, то есть, в какой функции и как.
также я попытался изменить переменную count с новой длиной в vfs_write()
, но затем выдает ошибку «ошибка записи cat: на устройстве не осталось места».
работает нормально, когда я передаю файл, кратный 16.