آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

encrypt کردن (کدگذاری) ویدئو (حل شد)

محمد  9 سال پیش  8 سال پیش
+1 0

با سلام.

هدفم از این سوال اینه که کاربر به ویدئوهایی که داخل برنامه گذاشتم دسترسی پیدا نکنه و نتونه اونها رو استخراج کنه.

دوستان عزیز چه راه حلی رو برای encrypt کردن (کد گذاری ویدئو) پیشنهاد می کنید؟

1. روش استاد در ویدئوی فایل فرمت اختصاصی:

من با استفاده از روش استاد تونستم عکس و فیلم رو کدگذاری کنم ولی فقط تونستم عکس رو decrypt کنم. اونم به دلیل اینکه bitmat مستقیما میتونه objectInputStream رو به عکس تبدیل کنه. اما ویدئو رو نتونستم decrypt کنم چون mediaPlayer نمیتونه از objectInputStream استفاده کنه و فقط میتونه FileInputStream یا FileOutputStream رو از طریق دستور getFD پخش کنه که لازمه این کار ذخیره کردن objectInputStream روی گوشیه (که در این صورت کاربر به ویدئوی decode شده دسترسی پیدا میکنه).

حالا سوال من اینه که کسی از دوستان راه حلی جهت پخش objectInputStream بدون نیاز به ذخیره اون توی گوشی داره یا نه؟ (اصطلاحا on the air)

2-روش دوم استفاده از کتابخانه libMedia هستش ولی من نتونستم باهاش به نتیجه برسم.

3-توی یه برنامه دیدم که کل عکسهای برنامه رو داخل یه دیتابیس encrypt شده گذاشته بود. میشه با ویدئو هم همین کار رو کرد؟

ممنون میشم دوستانی که توی این زمینه قبلا کار کردن نظرشونو بدن.

با تشکر.

0 0
سلام من هم به همچین چیزی نیاز دارم میشه بگین چطوری مشکلتون حل شد؟ (8 سال پیش)
0 0
جناب ظاهرا مشکلتون حل شده اگه شده و براتون مقدوره تو همین تایپیک آموزش بدید (8 سال پیش)
0 0
لینک (8 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
tux-world  8 سال پیش
+2 0


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;

import javax.crypto.Cipher;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class Encrypter {
private final static int IV_LENGTH = 16; // Default length with Default 128
// key AES encryption
private final static int DEFAULT_READ_WRITE_BLOCK_BUFFER_SIZE = 1024;

private final static String ALGO_RANDOM_NUM_GENERATOR = "SHA1PRNG";
private final static String ALGO_SECRET_KEY_GENERATOR = "AES";
private final static String ALGO_VIDEO_ENCRYPTOR = "AES/CBC/PKCS5Padding";

@SuppressWarnings("resource")
public static void encrypt(SecretKey key, AlgorithmParameterSpec paramSpec, InputStream in, OutputStream out)
throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,
InvalidAlgorithmParameterException, IOException {
try {
// byte[] iv = new byte[] { (byte) 0x8E, 0x12, 0x39, (byte) 0x9C,
// 0x07, 0x72, 0x6F, 0x5A, (byte) 0x8E, 0x12, 0x39, (byte) 0x9C,
// 0x07, 0x72, 0x6F, 0x5A };
// AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
Cipher c = Cipher.getInstance(ALGO_VIDEO_ENCRYPTOR);
c.init(Cipher.ENCRYPT_MODE, key, paramSpec);
out = new CipherOutputStream(out, c);
int count = 0;
byte[] buffer = new byte[DEFAULT_READ_WRITE_BLOCK_BUFFER_SIZE];
while ((count = in.read(buffer)) >= 0) {
out.write(buffer, 0, count);
}
} finally {
out.close();
}
}

@SuppressWarnings("resource")
public static void decrypt(SecretKey key, AlgorithmParameterSpec paramSpec, InputStream in, OutputStream out)
throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,
InvalidAlgorithmParameterException, IOException {
try {
// byte[] iv = new byte[] { (byte) 0x8E, 0x12, 0x39, (byte) 0x9C,
// 0x07, 0x72, 0x6F, 0x5A, (byte) 0x8E, 0x12, 0x39, (byte) 0x9C,
// 0x07, 0x72, 0x6F, 0x5A };
// AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
Cipher c = Cipher.getInstance(ALGO_VIDEO_ENCRYPTOR);
c.init(Cipher.DECRYPT_MODE, key, paramSpec);
out = new CipherOutputStream(out, c);
int count = 0;
byte[] buffer = new byte[DEFAULT_READ_WRITE_BLOCK_BUFFER_SIZE];
while ((count = in.read(buffer)) >= 0) {
out.write(buffer, 0, count);
}
} finally {
out.close();
}
}

public static void main(String[] args) {
File inFile = new File("C:/enc_test/video.swf");
File outFile = new File("C:/enc_test/enc_video.swf");
File outFile_dec = new File("C:/enc_test/dec_video.swf");

try {
SecretKey key = KeyGenerator.getInstance(ALGO_SECRET_KEY_GENERATOR).generateKey();

byte[] keyData = key.getEncoded();
SecretKey key2 = new SecretKeySpec(keyData, 0, keyData.length, ALGO_SECRET_KEY_GENERATOR); //if you want to store key bytes to db so its just how to //recreate back key from bytes array

byte[] iv = new byte[IV_LENGTH];
SecureRandom.getInstance(ALGO_RANDOM_NUM_GENERATOR).nextBytes(iv); // If
// storing
// separately
AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);

Encrypter.encrypt(key, paramSpec, new FileInputStream(inFile), new FileOutputStream(outFile));
Encrypter.decrypt(key2, paramSpec, new FileInputStream(outFile), new FileOutputStream(outFile_dec));
} catch (Exception e) {
e.printStackTrace();
}

}

}

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .