2016-08-18 5 views
1

Inこのコードファイルは、元の画像、暗号化された画像および復号化された画像を保存しています。暗号化された画像のみがファイルに保存され、プレビューのために画像の復号化が行われます。

  1. のみ暗号化された画像は、暗号化された画像は、直接のByteArrayまたはとして設定することができます何かに復号化されるべき

  2. (savedimages)ファイルに格納する必要があります

    は、私はその2つの問題を抱えていますimageViewのビットマップ。現在、ファイルから直接取得しています。

これを達成するか、私はこのlibraryは、ある時点での暗号化を提供しますが、私は、暗号化の種類、多分それ'LLをチェックしていなかったいくつかの他の方法

public Main3Activity() { 
    try { 
     // SecureRandom sr = SecureRandom.getInstance("SHA1PRNG","Crypto"); 

     keyGenerator = KeyGenerator.getInstance("Blowfish"); 
     secretKey = keyGenerator.generateKey(); 
     cipher = Cipher.getInstance("Blowfish"); 
    } catch (NoSuchPaddingException ex) { 
     System.out.println(ex); 
    } catch (NoSuchAlgorithmException ex) { 
     System.out.println(ex); 
    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main3); 


    ActivityCompat.requestPermissions(this, new String[]{ACCESS_FINE_LOCATION, CAMERA, WRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE); 
    v1=(ImageView)findViewById(R.id.imageViewnew); 
    b1=(Button)findViewById(R.id.cameranew); 

    final String imagePath = "image" + ".png"; 
    File root = new File(Environment.getExternalStorageDirectory() + File.separator + "savedimages"); 
    root.mkdirs(); 
    if (!root.exists()) { 
     root.mkdir(); 
    } 

    file = new File(Environment.getExternalStorageDirectory() + File.separator + "savedimages",imagePath); 
    file1 = new File(Environment.getExternalStorageDirectory() + File.separator + "savedimages","Encryp"+imagePath); 
    file2 = new File(Environment.getExternalStorageDirectory() + File.separator + "savedimages","decryp"+imagePath); 

    b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      outputFileUri = Uri.fromFile(file); 
      intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
      startActivityForResult(intent, CAMERA_REQUEST); 

     } 
    }); 
} 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 


     OutputStream outStream = null; 
     InputStream inStream = null; 
     try { 

      System.out.println("Encryption Over"); 
      cipher.init(Cipher.ENCRYPT_MODE, secretKey); 
      inStream = new FileInputStream(file); 
      outStream = new FileOutputStream(file1); 
      byte[] buffer = new byte[1024]; 
      int len; 

      while ((len = inStream.read(buffer)) > 0) { 
       outStream.write(cipher.update(buffer, 0, len)); 
       outStream.flush(); 
      } 
      outStream.write(cipher.doFinal()); 
      outStream.close(); 
     } catch (IllegalBlockSizeException ex) { 
      System.out.println(ex); 
     } catch (BadPaddingException ex) { 
      System.out.println(ex); 
     } catch (InvalidKeyException ex) { 
      System.out.println(ex); 
     } catch (FileNotFoundException ex) { 
      System.out.println(ex); 
     } catch (IOException ex) { 
      System.out.println(ex); 
     } 


     try { 
      System.out.println("Decryption Over"); 

      cipher.init(Cipher.DECRYPT_MODE, secretKey); 
      inStream = new FileInputStream(file1); 
      outStream = new FileOutputStream(file2); 
      byte[] buffer = new byte[1024]; 
      int len; 

      while ((len = inStream.read(buffer)) > 0) 
      { 
      //------------>>>>>>>>> Here Image is Storing instead of that it should read as byte array 
       // ------------>>>>>>>>>> and read as bitmap and set in Imageview for preview 

       outStream.write(cipher.update(buffer, 0, len)); 
       outStream.flush(); 
      } 
      System.out.print("Decryption ovverrr"); 
      outStream.write(cipher.doFinal()); 
      inStream.close(); 
      outStream.close(); 
     } catch (IllegalBlockSizeException ex) { 
      System.out.println(ex); 
     } catch (BadPaddingException ex) { 
      System.out.println(ex); 
     } catch (InvalidKeyException ex) { 
      System.out.println(ex); 
     } catch (FileNotFoundException ex) { 
      System.out.println(ex); 
     } catch (IOException ex) { 
      System.out.println(ex); 
     } catch (Exception ex) { 
      System.out.println(ex); 
     } 


     BitmapFactory.Options options=new BitmapFactory.Options(); 
     final Bitmap b=BitmapFactory.decodeFile(file2.toString(),options); 
     System.out.println("Image getting from File"); 

     //----------->>>>>>>>>> Decrypted Image should view Here. Currently I am getting directly from file. 
     v1.setImageBitmap(b); 

    } 
} 
} 

答えて

0

使用thisライブラリ私は私の質問の解決策を見つけました。これは誰かに役立つかもしれません。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main3); 

    v1=(ImageView)findViewById(R.id.imageViewnew); 
    v2=(ImageView)findViewById(R.id.imageViewupdate); 
    b1=(Button)findViewById(R.id.cameranew); 
    b2=(Button)findViewById(R.id.cameraupp); 


    String IVX = "abcdefghijklmnop"; // 16 lenght - not secret 
    String SECRET_KEY = "secret1234567890"; // 16 lenght - secret 

    SimpleStorageConfiguration configuration = new SimpleStorageConfiguration.Builder() 
      .setEncryptContent(IVX, SECRET_KEY) 
      .build(); 

    if (SimpleStorage.isExternalStorageWritable()) { 
     storage = SimpleStorage.getExternalStorage(); 
    } 
    else { 
     storage = SimpleStorage.getInternalStorage(getApplicationContext()); 
    } 

    SimpleStorage.updateConfiguration(configuration); 

    imagePath = "image" + ".png"; 
    boolean dirExists = storage.isDirectoryExists("savedimages"); 

    if(dirExists==true) 
    { 
     System.out.println("Directoy Already Created"); 
    } 
    else { 
     storage.createDirectory("savedimages", true); 
    } 

    boolean fileExists = storage.isFileExist("savedimages",imagePath); 

    if(fileExists==true) { 
     System.out.println("File Already Created"); 
    } 
    else { 
     storage.createFile("savedimages", imagePath, " "); 
    } 

    ff=storage.getFile("savedimages",imagePath); 

    b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      outputFileUri = Uri.fromFile(ff); 
      intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
      startActivityForResult(intent, CAMERA_REQUEST); 

     } 
    }); 
} 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 

     BitmapFactory.Options options=new BitmapFactory.Options(); 
     final Bitmap b=BitmapFactory.decodeFile(ff.toString(),options); 
     v2.setImageBitmap(b); 

     storage.createFile("savedimages",imagePath,b); 

    } 
}} 
1

を試してみてくださいどのような方法がありますあなたのために十分である。 Java Fileクラスを使用する方が簡単です。

+0

はい、それは完璧に動作します。理解するのに一日かかった。しかし、メモリ不足のようないくつかの一般的なエラーは、終了後に起こっているようなストリームを読み取ることができませんでした私は私の答えを更新します。このような他のライブラリがありますか? – Vivil

関連する問題