Я пытаюсь реализовать операцию xor на первых 256 байтах видеофайла, который создает выходной видеофайл, Я хочу, чтобы выходное видео перестало работать, а затем, когда тот же вывод видео передается как вход, должен быть создан другой видеофайл, который должен вести себя как оригинальный. В основном я пытаюсь зашифровать и расшифровать его.Операция XOR на первых 256 байтах видеофайла
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.apache.commons.io.FileUtils;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView text;
private String workingPath;
File yourFile;
File outputFile;
Button decryptButton;
byte[] buffer;
RandomAccessFile raf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
workingPath = Environment.getExternalStorageDirectory()+"";
outputFile = new File(workingPath, "result4.mp4");
yourFile = new File(workingPath, "result5.mp4");
buffer = new byte[256];
try {
raf = new RandomAccessFile(yourFile,"rw");
raf.read(buffer);
try {
Log.d("pos1",raf.getFilePointer()+"");
} catch (IOException e) {
e.printStackTrace();
}
// FileUtils.writeByteArrayToFile(new File(workingPath+"/new.mp4"), buffer);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
byte[] outbyte = xor(buffer);
text = (TextView)findViewById(R.id.textView);
try {
raf.seek(0);
} catch (IOException e) {
e.printStackTrace();
}
try {
Log.d("pos2",raf.getFilePointer()+"");
} catch (IOException e) {
e.printStackTrace();
}
try {
raf.write(outbyte);
byte[] arr = new byte[(int) raf.length()];
raf.read(arr);
FileOutputStream fileOuputStream =
new FileOutputStream(outputFile);
fileOuputStream.write(arr);
fileOuputStream.close();
//raf.readFully(o);
// outputFile = raf;
} catch (IOException e) {
e.printStackTrace();
}
}
public static byte[] xor(byte[] a) {
int key=11;
byte[] result = new byte[a.length];
for (int i = 0; i < a.length; i++) {
a[i] = (byte)(a[i]^key); // we need to cast it back into a byte because it was converted to an int by XOR
}
return result;
}
}
В приведенном выше коде, оригинальный видео вход (yourFile) также останавливает working.I не знаю, почему
'RAF = новый RandomAccessFile (yourFile, "RW");' ... 'raf.write (outbyte);' Вот почему ... Что вы думаете, что делает? Если вы хотите изменить копию, только тогда не меняйте оригинал. Просто как тот. Это помогло бы вам, если бы вы открыли исходный файл только для чтения. – Fildor
Я не знал, что yourFile пострадает !! – MrRobot9
Но вы ** напишите ** на него. Метод для этого называется _write_. Как вы можете думать, что это ** не ** написано? : D Я не знаю, достаточно ли вы, чтобы знать музыкальные ленты. Но вы просто прослушали первые 5 секунд любимой ленты своей подруги, затем перемотали ленту и записали 5 секунд мусора на той же ленте. Ваш g/f убьет вас! – Fildor