Aes
如何加密文件以進行隨機訪問
我是一名熟悉 C/C++ 和 Python 的程序員。最近,我們接到一個團隊的任務,要求我們參與他們的一個項目:我們需要編寫一個小程序來使用對稱密鑰加密來加密一個大文件。我們可以在 CRT 模式下使用 AES128 或 AES256 輕鬆實現這一點。
然而,問題是,如果文件的一小部分與文件開頭的字節位置一起給出,我們應該能夠僅解密該部分。
我們認為將文件切割成多個部分並為每個部分應用單獨的生成密鑰,但問題是,如果所述部分不完全是我們切割的大小的一部分,我們可以做什麼。還想知道是否可以處理兩個重疊的此類塊。
我們目前正在研究的想法是這樣的:
- 我們每個切片為 128 個字節。
- 計算最後一個切片的字節數。因此,如果我們得到 10 到 128 的字節。它將是 9。
- 在開始時生成一個 9 字節的隨機填充,然後對其進行解密。然後刪除前 9 個字節。
- 如果多個切片重疊,它們將被拆分並重複該方法。
所以,我想知道這是否明智,或者是否有更好的密碼或算法允許這樣做。
PS:
- 這些文件將是圖像文件或文件文件。
- 只知道一些密碼學的基礎知識。
但問題是,如果文件的一小部分與文件開頭的字節位置一起給出,我們應該能夠僅解密該部分。
普通CTR 模式加密允許一個人獨立於其餘部分解密文件的任何塊,因此無需發明自己的模式。使用 AES,塊大小始終為 128 位,因此您可以從 16 字節的任意倍數開始解密。您只需要使用正確的計數器值。
如果你需要從一個偏移量而不是塊大小的倍數開始,你不需要塊中的前一個字節來正確解密它,你可以扔掉密鑰流的初始字節,即截斷 $ AES_k(c) $ 到最右邊的字節。