2016-03-31 11 views
0

Bir png dosyasından bir inputStream alabilir ve şifreli bir akış olarak gönderebilir ve png resim dosyası olarak kaydedebilir misiniz?Giriş Akışını Dosyaya Android olarak png olarak yazma

Şifrelemeden sonra, dosyanın şifresini çözmek ve görüntülemek istiyorum, ancak şifrelenmiş akıştaki fotoğrafı göremiyorum.

Bir OutputStream'i kaydettiğimde, dosyayı şifrelenmiş veya şifresi çözülmüş olarak göremiyorum. Herhangi bir istisna alamıyorum. Şifrelenmiş bir sürümü açtıktan sonra fotoğrafı göremiyorum.

Benim denemem bu dosyanın nasıl çözüldüğünü açıklığa kavuşturmak.

public void testDecryptionOfPhoto() throws Exception{ 
    File file = new File(getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "encryptedTest.png"); 
    InputStream inputStream = new FileInputStream(file); 
    InputStream decryptedPhoto = decryption.decryptInputStream(inputStream); 
    File file2 = new File(getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "photo.png"); 
    OutputStream outputStream = new FileOutputStream(file2); 
    IOUtils.copy(decryptedPhoto,outputStream); 
    outputStream.close(); 

Şifreleme

public InputStream encryptInputStream(InputStream inputStream) throws Exception{ 
     KeyCipher keyCiper = new KeyCipher(); 
     String streamContent = CharStreams.toString(new InputStreamReader(inputStream, "UTF-8")); 
     Cipher cipher = Cipher.getInstance("Blowfish"); 
     cipher.init(ENCRYPT_MODE, keyCipher.getSecretSpecKey(), keyCipher.getIvParameterSpec()); 

    InputStream encryptedStream = new ByteArrayInputStream(encodeToString(cipher.doFinal(streamContent.getBytes("UTF-8")), DEFAULT).getBytes()); 
    return encryptedStream; 
} 

Şifre çözme

public InputStream decryptInputStream(InputStream inputStream) throws Exception{ 
    KeyCipher keyCipher = new keyCipher(); 
    String streamContents = CharStreams.toString(new InputStreamReader(inputStream, "UTF-8")); 
    byte[] encrypted = Base64.decode(streamContents, DEFAULT); 

    Cipher cipher = Cipher.getInstance("Blowfish"); 
    cipher.init(Cipher.DECRYPT_MODE, keyCipher.getSecretSpecKey(), keyCipher.getIvParameterSpec()); 

    byte[] decryptedBytes = cipher.doFinal(encrypted); 
    InputStream decryptedStream = new ByteArrayInputStream(decryptedBytes); 
    return decryptedStream; 
+0

"Fotoğrafı gör" derken ne demek istiyorsun? Tam olarak görmeyi beklediğinizi görmemeniz nedir? –

+0

Şifrelenmiş bir fotoğrafı şifresini çözdüğümde fotoğrafı göremiyorum. Bu yüzden bir fotoğrafı şifreliyorum, sonra şifresini çözüyorum ve orijinal fotoğrafı göremiyorum. –

+0

Hata mı alıyorsunuz? Tam olarak ne görüyorsun? Lütfen açık ol. –

cevap

0

Sen şifreli akışları işlemek için kömürü veya toString() kullanamazsınız. Ve hiçbir şekilde utf-8 değil. Aktardığınız metin değil. Sadece şifrelenmiş baytları akıtın ve bunları bayt olarak alın.

İlgili konular