Verschlüsselung von Bilddateien auf Android – Cipher (Output | Input) Stream Probleme

Ich versuche, Bilddateien auf Android mit passwortbasierter Verschlüsselung zu verschlüsseln. Um das verschlüsselte Bild zu speichern, mache ich einfach das:

FileOutputStream fos = new FileOutputStream(thumbnailFile); CipherOutputStream cos = new CipherOutputStream(fos, encryptCipher); Bitmap thumbnail = Bitmap.createScaledBitmap(bm2, 140, 140, true); thumbnail.compress(Bitmap.CompressFormat.JPEG, 80, cos); 

Und es zu lesen, dies:

  • Recyclerview bindet alle Ansichten zur gleichen Zeit
  • Wie kann ich sicherstellen, dass ein Fenster immer über eine weiche Tastatur zeigt?
  • ScrollBy funktioniert nicht richtig in verschachteltem recyclerview
  • Kommissionierobjekt funktioniert nicht?
  • Wie bekommt man Android-App für beide Tabletten und pre 11 sdk?
  • Wie drucken lokale zeitzone in posix format in java (android)?
  •  FileInputStream fis = new FileInputStream(f); CipherInputStream cis = new CipherInputStream(fis, decryptCipher); Bitmap b = BitmapFactory.decodeStream(cis); 

    Aber die Bitmap endet als null. Der Code funktioniert, wenn ich die Verschlüsselung umbringe; Das ist, wenn ich die Datei (Input | Output) Streams anstelle der Cipher (Input | Output) Streams verwenden.

    Meine Ziffern werden wie folgt erstellt:

     public void initCiphers(char password[]) { PBEKeySpec pbeKeySpec; PBEParameterSpec pbeParamSpec; SecretKeyFactory keyFac; byte[] salt = { (byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c, (byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99 }; int count = 20; pbeParamSpec = new PBEParameterSpec(salt, count); pbeKeySpec = new PBEKeySpec(password); try { keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES"); SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec); encryptCipher = Cipher.getInstance("PBEWithMD5AndDES"); decryptCipher = Cipher.getInstance("PBEWithMD5AndDES"); encryptCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec); decryptCipher.init(Cipher.DECRYPT_MODE, pbeKey, pbeParamSpec); } catch (Exception e) { Log.v("tag", e.toString()); } 

    Ich bekomme keine Ausnahmen.

    Es gibt offensichtlich ein Problem mit der Verwendung von Cipher (Output | Input) Streams mit den Android-Funktionen für die Codierung und / oder Decodierung von Bildern, aber da diese Funktionen undurchsichtig sind und es keine Ausnahmen gibt, ist es schwer zu wissen, was es ist. Ich vermute, es hat mit Polsterung oder Spülung zu tun. Jede Hilfe wäre dankbar dankbar.

  • Die Gegenstände konnten nicht gedrückt werden. In android
  • Ein einfaches ndk-Projekt mit der Eigen-Bibliothek und jni
  • Android: Kann diesen Vorgang nicht ausführen, da der Verbindungspool geschlossen wurde
  • Wie man Scrollbars in Android WebView durch React Native versteckt
  • ACCESS_FINE_LOCATION SecurityException trotz der Angabe der Berechtigung in der Manifestdatei
  • AFNetworking für Android
  • 2 Solutions collect form web for “Verschlüsselung von Bilddateien auf Android – Cipher (Output | Input) Stream Probleme”

    Beim Schreiben in ein CipherOutputStream, stellen Sie sicher, dass Sie close() den Stream nach dem Schreiben der Daten (und nicht Schließen der zugrunde liegenden Stream vor ihm). Closing stellt sicher, dass die richtige Polsterung hinzugefügt wird. Ein flush() allein reicht hier nicht aus.

    Auch würde ich raten, nicht verwenden DES für neue Protokolle – bevorzugt heutzutage ist AES.

    Sie können Unterklasse CipherOutputStream oder sogar nur OutputStream, und nur überschreiben Sie die Flush () -Methode, um nichts zu tun.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.