我正在閱讀代碼ransom ware。根據代碼,作者已經將這些文件分成64 kb的塊進行加密。我無法理解爲什麼。是否需要將文件分成塊進行加密
1
A
回答
0
爲什麼不明,是攻擊代碼作者的選擇。
使用AES等當前加密方法不需要將文件大小限制爲64KB。大多數實現都可以處理任何大小的文件,但將AES的大小限制爲2^68個字節是明智之舉。
1
如果您查看代碼,加密器會將1024 * blocksize的字節(實際上是16 KiB)作爲單個塊讀取,並使用相同的密碼對象分別加密每個塊。
爲了能夠加密大文件,必須完成此操作,因爲有些文件太大而無法全部讀入內存,然後進行加密並寫回。這意味着可用內存必須比需要加密的文件大三倍以上。
由於PyCrypto沒有基於流的密碼實現,所以這是最接近的,通過保持較小的內存佔用來完成相同的任務。
通常,每個塊的加密都會產生獨立的密文塊,需要按照它們的寫入方式以相同的塊形式讀回,但這裏並不是必需的。 AES-CBC將當前明文塊與先前的密文塊異或。如果它是第一個塊,則IV用作前一個密文塊。由於IV永遠不會在密碼對象上重置,它將始終保存以前的密文塊。結果是產生的密文實際上等同於作爲單個大塊的加密。因爲他很可能使用**塊密碼**
def encrypt(in_file, out_file, password, key_length=32):
bs = AES.block_size
salt = Random.new().read(bs - len('Salted__'))
key, iv = derive_key_and_iv(password, salt, key_length, bs)
cipher = AES.new(key, AES.MODE_CBC, iv)
out_file.write('Salted__' + salt)
finished = False
while not finished:
chunk = in_file.read(1024 * bs)
if len(chunk) == 0 or len(chunk) % bs != 0:
padding_length = (bs - len(chunk) % bs) or bs
chunk += padding_length * chr(padding_length)
finished = True
out_file.write(cipher.encrypt(chunk))
相關問題
- 1. 是否需要進行HTML加密?
- 2. OAuth:我是否需要通過HTTPS對HMAC-SHA1進行加密
- 3. 我們是否需要使用插件進行模塊化
- 4. 我是否需要生成第二個文件來對文件進行排序?
- 5. 文件加密成N個文件,但是至少只需要解密M個?
- 6. 加密貨幣是否需要區塊鏈技術?
- 7. SHA加密 - 是否真的需要鹽?
- 8. 是否需要頭文件?
- 9. 是否需要resx文件?
- 10. 是否需要對文件名進行網址編碼?
- 11. 是否需要對.dmg文件進行簽名?
- 12. 需要使用PEM密鑰進行加密和解密
- 13. 提取在Linux分裂的.tar文件,這需要分別進行解密
- 14. 是否需要配置塊?
- 15. 我是否需要SSL進行論壇
- 16. mysql_close()是否需要進行REAL優化?
- 17. 是否需要對JSON進行消毒?
- 18. config.json文件是否加密?
- 19. 我們是否需要在IE8中對此進行區分?
- 20. 我是否需要WOW64轉儲進行GDI句柄分析?
- 21. 用於.htaccess的密碼是否需要加密?
- 22. 是否需要加密認證的密鑰?
- 23. 更改before_filter不需要密碼進行配置文件編輯
- 24. 是否可以根據需要加載模塊/組件?
- 25. 需要在Web配置文件中加密某些部分
- 26. 我們是否需要在heroku上添加security.yml進行部署?
- 27. 服務模塊是否仍然需要密鑰
- 28. Perl將文本文件分割成塊
- 29. 在.properties文件中的加密值之前是否需要ENC功能?
- 30. 使用ansible對加密AWS .pem密鑰文件進行加密
:
僅供參考,我說的是這個。 – sascha
@sascha爲什麼給出AES的塊大小爲128位? – zaph
可能會限制內存佔用量vs將整個文件加載到內存中,如該實現中所需要的那樣。鏈接代碼的最上面一行是在源代碼中的鏈接,爲什麼不添加註釋@作者並要求澄清。 –