對於部分文件上傳和加密,我想從大文件(例如:100MB)中讀取塊(例如:10MB),使用AES256對塊進行加密並上傳大塊到服務器。 在服務器上,塊組合在一起成爲一個大文件(然後應該代表完整的加密文件)。openssl AES256文件部分的多重加密(稍後加入)
在取出塊並將它們發送到服務器之前,我想避免對文件進行完全加密(例如:100MB!)(CPU開銷,因爲我首先需要複製整個文件並執行AES256在整個文件中)。
我嘗試以下(例如用於16MB文件= 2個結塊= 1 * 10MB + 1 * 6MB)
第一組塊是〜10MB,確保則CHUNKSIZE是16(AES_BLOCK_SIZE)的倍數
EVP_CIPHER_CTX e_ctx;
EVP_CIPHER_CTX_init(&e_ctx);
EVP_EncryptInit_ex(&e_ctx, EVP_aes_256_cbc(), NULL, key, iv);
EVP_EncryptUpdate(&e_ctx, enc_data, &outlen, unenc_data, chunksize_to_load_from_file_unencrypted);
在第一塊期間,我不會調用EVP_EncryptFinal_ex(),因爲加密還沒有結束(可能是這個問題?)。
第二塊是〜6MB,有我對數據進行加密,從&outlen
偏移的上面休息
EVP_CIPHER_CTX e_ctx;
EVP_CIPHER_CTX_init(&e_ctx);
EVP_EncryptInit_ex(&e_ctx, EVP_aes_256_cbc(), NULL, key, iv);
EVP_EncryptUpdate(&e_ctx, enc_data, &outlen, unenc_data, chunksize_to_load_from_file_unencrypted);
EVP_EncryptFinal_ex(&e_ctx, enc_data+outlen, &final_length);
在這兩個文件的部分得到的加入了服務器。 然後,我可以解密文件「成功」,相同大小的未加密文件。但是在偏移~10MB,一些字節是不同的(16字節!= AES_BLOCK_SIZE
)
任何想法?這可能是填充?這不僅是最後的? EVP_EncryptFinal_ex
不通過EVP_EncryptUpdate
通過整個文件時行爲不同?
我怎樣才能傳輸加密的部分文件塊,並加入他們在服務器上以獲得一個適當的加密文件?
謝謝!
當前日期和年齡是100MB?這可能會在一秒鐘內加密! –
100MB是一個例子,也可能高達<= 2GB。我正在編寫一個後臺同步守護進程,其中AES256加密可能需要一些重要的CPU ticks,用戶不會喜歡...... –