2016-04-17 5 views
2

Einfach habe ich eine CipherInputStream und ich möchte es in ein Byte-Array konvertieren. Andere Beiträge haben nicht geholfen. Wie erreiche ich das?Convert Cipher Input Stream zu Byte-Array?

FileInputStream fis = new FileInputStream("dataPath/data"); 
SecretKeySpec sks = new SecretKeySpec("password".getBytes(), "AES"); 
Cipher cipher = Cipher.getInstance("AES"); 
cipher.init(Cipher.DECRYPT_MODE, sks); 
CipherInputStream cis = new CipherInputStream(fis, cipher); 

So, wie ein Byte-Array von cis abzurufen?

Antwort

3

CipherInputStream ist eine Implementierung eines Standard InputStream, daher können Sie einfach in ein Byte-Array lesen Sie ein ByteArrayOutputStream zum Beispiel mit:

CipherInputStream cis = ... 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
int len; 
byte[] buffer = new byte[4096]; 
while ((len = cis.read(buffer, 0, buffer.length)) != -1) { 
    baos.write(buffer, 0, len); 
} 
baos.flush(); 
byte[] cipherByteArray = baos.toByteArray(); // get the byte array 
+0

Dank! Hat funktioniert. Ist es sinnvoll, dem Array sagen 256 statt 4096 zuzuordnen? Weil es nicht so groß sein wird, obwohl ich die genaue Größe nicht kenne. – solo

+0

@solo 4096 ist nur die Puffergröße. Wenn Sie wissen, dass die Daten normalerweise kleiner als 256 Byte sind, können Sie auch 256 verwenden. – Floern