Verwendet die Standardtechnik mit einem RSA-Schlüssel/Paar, dessen öffentlicher Schlüssel einen zufälligen 16-Byte-Schlüssel verschlüsselt, der meine Daten mit AES/CBC/PKCS5Padding verschlüsselt.
Ich benutze Hüpfburg für meine Bedürfnisse
Ich muss Ströme von meist großen Daten (512 MB +) verschlüsseln. Auf laufenden Leistungstests, um den Overhead der Verschlüsselung zu verstehen, sehe ich, dass Verschlüsselung fast 30-40% teurer ist als unverschlüsselte Daten. Wird das erwartet?Java AES/CBC/PKCS5Padding Stream-Verschlüsselungsleistung im Vergleich zu keiner Verschlüsselung
Beispielcode
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);
}
anderswo
InputStream encryptedStream = ...encryptStream(plainStream, key, iv, encKey);
IOUtils.copyLarge(encryptedStream, outputStream);
Ich habe um mit Java Server args gespielt; bestätigt, dass der AES-NI-Befehlssatz eingeschaltet ist usw. Ich wollte nur eine Idee haben, welchen Overhead ich bei der Verschlüsselung großer Streams erwarten sollte.
EDIT: Korrigierte Informationen, dass ich Bouncycastle nur für die Schlüsselpaar-Generation verwenden. Für die AES-Verschlüsselung mit SunJCE als Sicherheitsanbieter.
Haben Sie überprüft, ob Ihre Java-Version AES-NI verwendet? Siehe [AES-NI-Grundeinstellungen standardmäßig aktiviert?] (Http://stackoverflow.com/questions/23058309/aes-ni-intrinsics-enabled-by-default) – Robert
Vielen Dank. Ich habe mit diesen Argumenten versucht und sehe eine sehr leichte Leistungssteigerung mit dem -server arg hinzu. Ich werde mehr darüber nachdenken. – sunny