Facebook Gizleme Kütüphanesi'ni kullanarak görüntüyü şifrelemeye ve şifresini çözmeye çalışıyorum. Bu, ilk kez kullanıyorum ve dolayısıyla önemsiz ise benimle birlikte. İstisnalarımın nedenlerini anlamak için SO ile ilgili diğer sorulara baktım, çalışamadım. here gelen crypto.jar ve libs.zip indirilen Eclipse kullanıyorum ve dolayısıyla am ve klasör ve .bu dosyaları libs için kavanoz dosyası ekledi: Burada Facebook Gizil - Görüntü Şifreleme ve Şifre Çözme
entegre ediliyor ... Bugüne dek yapmış budur libs klasörünün içindeki ilgili klasöre.Benim senaryo:
Ben kamera, şifreleme bir görüntüyü yakalamak ve benim telefon belleğine kaydetmenize gerek. Şifresini çöz ve bir resim gösterisinde göster. Daha sonraki bir aşamada, bu görüntüyü bellekten deşifre etmeli ve ağ üzerinden göndermem gerek.
public void saveFile(Bitmap photo, int code) {
try {
ContextWrapper cw = new ContextWrapper(getApplicationContext());
File directory = cw.getDir(DIRECTORY, Context.MODE_PRIVATE);
File mypath = new File(directory, ENCRYPTEDFILENAME);
if (code == KTP_PICTURE_REQUEST_CODE) {
mKtppicture = Uri.fromFile(mypath).toString();
if (Const.DEBUGGING)
Log.d(Const.DEBUG, "KTP Picture Path: " + mKtppicture);
} else if (code == PROFILE_PICTURE_REQUEST_CODE) {
mPicture = Uri.fromFile(mypath).toString();
if (Const.DEBUGGING)
Log.d(Const.DEBUG, "Profile Picture Path: " + mPicture);
}
Crypto crypto = new Crypto(
new SharedPrefsBackedKeyChain(this),
new SystemNativeCryptoLibrary());
if (!crypto.isAvailable()) {
return;
}
OutputStream fileStream = new BufferedOutputStream(
new FileOutputStream(mypath));
OutputStream outputStream = crypto.getCipherOutputStream(
fileStream, new Entity("Password"));
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
objectOutputStream.write(bitmapToBytes(photo));
objectOutputStream.close(); //Line with exception
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
bitmapToBytes():
private byte[] bitmapToBytes(Bitmap photo) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
return byteArray;
}
decodeFile():
Yani, benim kod
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (Const.DEBUGGING) {
Log.d(Const.DEBUG, "RequestCode: " + requestCode + "\nResultCode:"
+ resultCode);
}
int tag = getRecordCount();
tag++;
if (requestCode == KTP_PICTURE_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
ENCRYPTEDFILENAME = tag + "_" + KTP_TAG + ".png";
saveFile((Bitmap) data.getExtras().get("data"), requestCode);
Bitmap decryptedImage = decodeFile(ENCRYPTEDFILENAME);
mImgBtnKtppicture.setImageBitmap(decryptedImage);
} else if (resultCode == RESULT_CANCELED) {
if (Const.DEBUGGING)
Log.d(Const.DEBUG, "KTP_RESULT CANCELED");
} else {
}
}
if (requestCode == PROFILE_PICTURE_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
ENCRYPTEDFILENAME = tag + "_" + PROFILE_TAG + ".png";
saveFile((Bitmap) data.getExtras().get("data"), requestCode);
Bitmap decryptedImage = decodeFile(ENCRYPTEDFILENAME);
mImgBtnPicture.setImageBitmap(decryptedImage);
} else if (resultCode == RESULT_CANCELED) {
if (Const.DEBUGGING)
Log.d(Const.DEBUG, "PICTURE_RESULT CANCELED");
} else {
}
}
}
saveFile (...) aşağıda gider
private Bitmap decodeFile(String filename) {
Crypto crypto = new Crypto(
new SharedPrefsBackedKeyChain(this),
new SystemNativeCryptoLibrary());
ContextWrapper cw = new ContextWrapper(getApplicationContext());
File directory = cw.getDir(DIRECTORY, Context.MODE_PRIVATE);
File file = new File(directory, filename);
try{
FileInputStream fileStream = new FileInputStream(file);
InputStream inputStream = crypto.getCipherInputStream(
fileStream,
new Entity("Password"));
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
Bitmap bitmap = bytesToBitmap((byte[])objectInputStream.readObject());
return bitmap;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
bytesToBitmap(): i görüntüyü kaydetmeye çalıştığınızda
private Bitmap bytesToBitmap(byte[] bytes) {
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
return bitmap;
}
i saveFile içinde objectOutputStream.close();
bir UnsupportedOperationException olsun()
Logcat İz: Yardımlarınız için
10-01 16:55:34.529: W/System.err(31291): java.lang.UnsupportedOperationException
10-01 16:55:34.529: W/System.err(31291): at com.facebook.crypto.streams.NativeGCMCipherOutputStream.write(NativeGCMCipherOutputStream.java:93)
10-01 16:55:34.529: W/System.err(31291): at java.io.DataOutputStream.writeByte(DataOutputStream.java:144)
10-01 16:55:34.529: W/System.err(31291): at java.io.ObjectOutputStream.drain(ObjectOutputStream.java:394)
10-01 16:55:34.529: W/System.err(31291): at java.io.ObjectOutputStream.flush(ObjectOutputStream.java:461)
10-01 16:55:34.529: W/System.err(31291): at java.io.ObjectOutputStream.close(ObjectOutputStream.java:337)
10-01 16:55:34.529: W/System.err(31291): at com.xx.xxx.RegistrationActivity.saveFile(RegistrationActivity.java:761)
10-01 16:55:34.529: W/System.err(31291): at com.xx.xxx.RegistrationActivity.onActivityResult(RegistrationActivity.java:639)
10-01 16:55:34.529: W/System.err(31291): at android.app.Activity.dispatchActivityResult(Activity.java:5423)
10-01 16:55:34.529: W/System.err(31291): at android.app.ActivityThread.deliverResults(ActivityThread.java:3347)
10-01 16:55:34.529: W/System.err(31291): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3394)
10-01 16:55:34.529: W/System.err(31291): at android.app.ActivityThread.access$1300(ActivityThread.java:135)
10-01 16:55:34.529: W/System.err(31291): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
10-01 16:55:34.529: W/System.err(31291): at android.os.Handler.dispatchMessage(Handler.java:102)
10-01 16:55:34.529: W/System.err(31291): at android.os.Looper.loop(Looper.java:136)
10-01 16:55:34.529: W/System.err(31291): at android.app.ActivityThread.main(ActivityThread.java:5001)
10-01 16:55:34.529: W/System.err(31291): at java.lang.reflect.Method.invokeNative(Native Method)
10-01 16:55:34.529: W/System.err(31291): at java.lang.reflect.Method.invoke(Method.java:515)
10-01 16:55:34.529: W/System.err(31291): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
10-01 16:55:34.529: W/System.err(31291): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
10-01 16:55:34.529: W/System.err(31291): at dalvik.system.NativeStart.main(Native Method)
10-01 16:55:34.529: W/System.err(31291): java.io.IOException: Unexpected crypto version -1
10-01 16:55:34.529: W/System.err(31291): at com.facebook.crypto.util.Assertions.checkArgumentForIO(Assertions.java:29)
10-01 16:55:34.539: W/System.err(31291): at com.facebook.crypto.CipherHelper.getCipherInputStream(CipherHelper.java:52)
10-01 16:55:34.539: W/System.err(31291): at com.facebook.crypto.Crypto.getCipherInputStream(Crypto.java:83)
10-01 16:55:34.539: W/System.err(31291): at com.xx.xxx.RegistrationActivity.decodeFile(RegistrationActivity.java:821)
10-01 16:55:34.539: W/System.err(31291): at com.xx.xxx.RegistrationActivity.onActivityResult(RegistrationActivity.java:640)
10-01 16:55:34.539: W/System.err(31291): at android.app.Activity.dispatchActivityResult(Activity.java:5423)
10-01 16:55:34.539: W/System.err(31291): at android.app.ActivityThread.deliverResults(ActivityThread.java:3347)
10-01 16:55:34.539: W/System.err(31291): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3394)
10-01 16:55:34.539: W/System.err(31291): at android.app.ActivityThread.access$1300(ActivityThread.java:135)
10-01 16:55:34.539: W/System.err(31291): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
10-01 16:55:34.539: W/System.err(31291): at android.os.Handler.dispatchMessage(Handler.java:102)
10-01 16:55:34.539: W/System.err(31291): at android.os.Looper.loop(Looper.java:136)
10-01 16:55:34.539: W/System.err(31291): at android.app.ActivityThread.main(ActivityThread.java:5001)
10-01 16:55:34.539: W/System.err(31291): at java.lang.reflect.Method.invokeNative(Native Method)
10-01 16:55:34.539: W/System.err(31291): at java.lang.reflect.Method.invoke(Method.java:515)
10-01 16:55:34.539: W/System.err(31291): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
10-01 16:55:34.549: W/System.err(31291): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
10-01 16:55:34.549: W/System.err(31291): at dalvik.system.NativeStart.main(Native Method)
10-01 16:55:34.549: D/BAT(31291): onResume called
teşekkürler. ..
OutputStream OutputStream = crypto.getCipherOutputStream ( FileStream, yeni Varlık ("Parola")); .. bunu yapmanın doğru yolu budur. Son parametre olan Entity'nin bir şifre olduğunu düşünüyorum. Yani, test için, "Şifre" –