0
После шифрования видеофайла размер зашифрованного файла меньше исходного файла (обычно половина исходного размера файла). Так что я не могу его расшифровать. Мой код для шифрования ..Android-шифрование: размер зашифрованного файла меньше исходного файла
public static void encryptMe(String vidName)
{
try {
File rawData = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "HSDownloads");
File fiss = new File(rawData, vidName);
Log.d(TAG,"input file "+fiss.toString());
FileInputStream in = new FileInputStream(fiss);
File encreptedFileDirectory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "HSEncript");
if(encreptedFileDirectory.exists())
{
}
else
{
encreptedFileDirectory.mkdirs();
}
File outfile = new File(encreptedFileDirectory,vidName);
OutputStream out= new FileOutputStream(outfile);
byte[] skey = AppUtiles.generateKey("qwertyuiopasdfgh");
SecretKeySpec key = new SecretKeySpec(skey, "AES");
Cipher c = Cipher.getInstance("AES");
c.init(Cipher.ENCRYPT_MODE, key);
out = new CipherOutputStream(out, c);
int count = 0;
byte[] buffer = new byte[128*1024];
while ((count = in.read(buffer)) >= 0)
{
out.write(buffer, 0, count);
Log.d(TAG,"inside while loop encryptMe()"+(count = in.read(buffer)));
}
out.close();
}
catch(Exception e)
{
Log.d(TAG,"exception encryption >"+Log.getStackTraceString(e));
}
finally
{
Log.d(TAG,"Inside finally ");
}
}
Для дешифрования и потокового видео, я использую libmedia баночку.
public void playENCVideo(String path) {
try {
Cipher decipher = null;
KeyGenerator kgen = KeyGenerator.getInstance("AES");
byte[] key = AppUtiles.generateKey("qwertyuiopasdfgh");
SecretKeySpec skey = new SecretKeySpec(key, "AES");
decipher = Cipher.getInstance("AES");
decipher.init(Cipher.DECRYPT_MODE, skey);
mServer = new LocalSingleHttpServer();
mServer.setCipher(decipher);
mServer.start();
path = mServer.getURL(path);
vvPlayer.setVideoPath(path);
vvPlayer.start();
} catch (InvalidKeyException e) {
Log.d(TAG, "InvalidKeyException ");
} catch (NoSuchAlgorithmException e) {
Log.d(TAG, "NoSuchAlgorithmException ");
} catch (NoSuchPaddingException e) {
Log.d(TAG, "NoSuchPaddingException ");
} catch (IOException e) {
Log.d(TAG, "IOEXCEPTION ");
}
catch (Exception e) {
Log.d(TAG,"Genral exceptin");
}
}
out.write (буфер, 0, количество); записывает данные, внутри цикла while, линия над вами выделена. – Sudarshan
Вы делаете два чтения (один в цикле while и один в операторе журнала) .. но вы пишете только один из них. Вы просачиваетесь каждую секунду, читаете и, таким образом, получаете файл с половинным размером. –
Thank вы, Моя проблема решена. Также я пытаюсь загрузить и воспроизвести видео в своем приложении. Для воспроизведения видео только в моем приложении шифрует его. Но код используется с огромным временем. Как я могу сократить время шифрования для вышеуказанного кода. – Sudarshan