簡體   English   中英

Linux內核中使用AES的加密和解密

[英]Encryption and Decryption using AES in Linux Kernel

我希望在創建文件時加密文件,並在讀取操作期間使用AES算法解密文件。 我還分別在vfs_write()vfs_read()編寫了用於加密和解密的代碼,並且它運行良好,但現在唯一的問題是k每當我將文件傳遞給長度不是16的倍數的vfs_write() ( AES BLOCK SIZE)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內核掛起,我也不知道在哪里做這樣的事情,即在哪個功能和如何。

我也嘗試在vfs_write()使用新長度更改count變量,但隨后它會出現錯誤,因為“cat write error:設備上沒有剩余空間”。

當我傳遞16的倍數的文件時,它工作正常。

您當前的模式需要填充; 在某些情況下(例如你遇到的情況),很難做填充。 通常,磁盤/文件系統加密是在其他模式下完成的,它不需要填充(並且易於進行隨機讀/寫)。

分組密碼模式概述: http//en.wikipedia.org/wiki/Block_cipher_modes_of_operation

模式:ECB,CBC,PCBC,CFB,OFB需要填充

和模式CTR(計數器)不需要填充。

這種模式很簡單,以錯誤的(不安全,易於破解)方式實現它更容易。

磁盤加密http://en.wikipedia.org/wiki/Disk_encryption_theory概述了更高級的模式(XEX,XTS)。 其中一些仍然需要填充。

即使使用通用密碼模式,您也會遇到很多問題。其中一些內容包含在“Cryptfs:可堆疊的Vnode級加密文件系統”中

為什么你不刻意使它16字節,加密它然后在解密后丟棄填充。 我的意思是不是單靠依靠aes,而是自己動手。 通過這種方式,您可以確保獲得的數據是正確的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM