[英]Java AES/CBC/PKCS5Padding stream encryption performance compared to no encryption
我使用標准技術使用RSA密鑰/對,其公鑰加密16字節隨機密鑰,使用AES / CBC / PKCS5Padding加密我的數據。
我正在使用充氣城堡滿足我的需求
我需要加密通常大數據流(512MB +)。 在運行性能測試以了解加密的開銷時,我發現加密比未加密的數據貴近30-40%。 這是預期的嗎?
示例代碼
public InputStream encryptStream(InputStream streamToEncrypt, byte[] key, byte[] iv, byte[] encryptedKey // 256 bytes) {
final Cipher cipher = getCipher(Cipher.ENCRYPT_MODE, key, iv);
byte[] civ = cipher.getIV();
...
ByteArrayInputStream ivEncryptedKeyStream = new ByteArrayInputStream(ivEncryptedKeyArray);
CipherInputStream encrypted = new CipherInputStream(streamToEncrypt, cipher);
return new SequenceInputStream(ivEncryptedKeyStream, encrypted);
}
別處
InputStream encryptedStream = ...encryptStream(plainStream, key, iv, encKey);
IOUtils.copyLarge(encryptedStream, outputStream);
我玩過java服務器args; 確認AES-NI指令集已打開等。只是想知道加密大流時我應該期待什么開銷?
編輯:更正了我正在使用bouncycastle只為密鑰對生成的信息。 對於使用SunJCE作為安全提供程序的AES加密。
將Bouncy Castle用於Oracle Java API中的所有內容的想法讓我感到震驚。 由於Bouncy是一個僅限軟件的庫,因此不會為Bouncy啟用AES-NI。 Java不會用硬件指令神奇地替換AESFastEngine。 如果你想要速度,只需使用Oracle實現。
至於開銷:是的,應該預期開銷。 與其他計算相比,百分比有多大取決於機器和其他計算的性能。 但是,40%可能是合理的預期。
筆記:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.